唤醒设备不工作设备、工作

2023-09-05 04:45:33 作者:牛马大哥

我用这个code唤醒我的设备(摩托摹1根),当屏幕关闭,但似乎这是行不通的。它的工作原理,只有当屏幕上。

编辑:现在它的工作原理,但CallScreen.class显示1秒,然后结束。 LogCat中没有提供的信息的。

code:

 意向意图=新的意图(MainActivity.this,NiceBroadcastReceiver.class);
    intent.setFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
    intent.putExtra(姓名,名);
    pendingIntent = PendingIntent.getBroadcast(getApplicationContext(),0,意向,PendingIntent.FLAG_UPDATE_CURRENT);

    alarmManager =(AlarmManager)getSystemService(Context.ALARM_SERVICE);
    alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
            SystemClock.elapsedRealtime()+ timeToCall,pendingIntent);
 

NiceBroadcastReceiver延伸BroadcastReceiver的:

  @覆盖
公共无效的onReceive(上下文的背景下,意图意图){
    字符串名称= intent.getExtras()的getString(名)。

    意图I =新的意图(背景下,CallScreen.class);
    i.setClassName((包),(类));
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    i.putExtra(名2,名);
    context.startActivity(ⅰ);
    //Toast.makeText(context,姓名,Toast.LENGTH_SHORT).show();
}
 

CallScreen.class:

  PowerManager.WakeLock fullWakeLock;
    PowerManager.WakeLock partialWakeLock;

    电源管理器电源管理器=(电源管理器)getSystemService(Context.POWER_SERVICE);
    fullWakeLock = powerManager.newWakeLock((PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP),Loneworker  - 全WAKE LOCK);
    partialWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,Loneworker  - 部分WAKE LOCK);

    如果(fullWakeLock.isHeld()){
        fullWakeLock.release();
    }
    如果(partialWakeLock.isHeld()){
        partialWakeLock.release();
    }

    fullWakeLock.acquire();

    KeyguardManager keyguardManager =(KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE);
    KeyguardManager.KeyguardLock keyguardLock = keyguardManager.newKeyguardLock(TAG);
    keyguardLock.disableKeyguard();

    RelativeLayout的RL =(RelativeLayout的)findViewById(R.id.relLay);
    rl.setOnClickListener(新View.OnClickListener(){
        @覆盖
        公共无效的onClick(视图v){
           完();
        }
    });

    捆绑额外= getIntent()getExtras()。
    如果(临时演员!= NULL){
        名称= extras.getString(名2);
    }

    incomingCall =(TextView中)findViewById(R.id.textIncomingView);
    来电=(TextView中)findViewById(R.id.callerId);
    caller.setText(名称);

    URI通知= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
    MP = MediaPlayer.create(getApplicationContext(),通知);
    mp.start();
 
达州学校专用给水设备原理

解决方案

好了,我知道了。在我看来,标志并不做他们的工作正常所以牛肉的setContentView后:

  PowerManager.WakeLock WL
...
this.getWindow()setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN。|
                    WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
                    WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
                    WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN |
                    WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
                    WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
                    WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);

    的setContentView(R.layout.activity_call_screen);

    电源管理器PM =(电源管理器)getSystemService(Context.POWER_SERVICE);
    WL = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP,我的标签);
    wl.acquire();

    KeyguardManager keyguardManager =(KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE);
    KeyguardManager.KeyguardLock keyguardLock = keyguardManager.newKeyguardLock(TAG);
    keyguardLock.disableKeyguard();
 

I used this code to wake up my device (Moto G 1 gen) when screen is off, but it seems that it doesn't work. It works only when screen is on.

edit: Now it works, but CallScreen.class shows for 1 seconds and then finishes. LogCat provides no information for that.

Code:

Intent intent = new Intent(MainActivity.this, NiceBroadcastReceiver.class);
    intent.setFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
    intent.putExtra("name",name);
    pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

    alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
            SystemClock.elapsedRealtime() + timeToCall, pendingIntent);

NiceBroadcastReceiver extends BroadcastReceiver:

 @Override
public void onReceive(Context context, Intent intent) {
    String name = intent.getExtras().getString("name");

    Intent i = new Intent(context, CallScreen.class);
    i.setClassName("(package)", "(class)");
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    i.putExtra("name2", name);
    context.startActivity(i);
    //Toast.makeText(context, name, Toast.LENGTH_SHORT).show();
}

CallScreen.class:

PowerManager.WakeLock fullWakeLock;
    PowerManager.WakeLock partialWakeLock;

    PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
    fullWakeLock = powerManager.newWakeLock((PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP), "Loneworker - FULL WAKE LOCK");
    partialWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Loneworker - PARTIAL WAKE LOCK");

    if(fullWakeLock.isHeld()){
        fullWakeLock.release();
    }
    if(partialWakeLock.isHeld()){
        partialWakeLock.release();
    }

    fullWakeLock.acquire();

    KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
    KeyguardManager.KeyguardLock keyguardLock = keyguardManager.newKeyguardLock("TAG");
    keyguardLock.disableKeyguard();

    RelativeLayout rl = (RelativeLayout) findViewById(R.id.relLay);
    rl.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
           finish();
        }
    });

    Bundle extras = getIntent().getExtras();
    if (extras != null) {
        name = extras.getString("name2");
    }

    incomingCall = (TextView) findViewById(R.id.textIncomingView);
    caller = (TextView) findViewById(R.id.callerId);
    caller.setText(name);

    Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
    mp = MediaPlayer.create(getApplicationContext(), notification);
    mp.start();

解决方案

Okay, I got it. Seems to me that FLAGS don't do their job properly so the beef is after setContentView:

PowerManager.WakeLock wl
...
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN |
                    WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
                    WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
                    WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN |
                    WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
                    WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
                    WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);

    setContentView(R.layout.activity_call_screen);

    PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
    wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "My Tag");
    wl.acquire();

    KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
    KeyguardManager.KeyguardLock keyguardLock = keyguardManager.newKeyguardLock("TAG");
    keyguardLock.disableKeyguard();

 
精彩推荐
图片推荐