Waking up the device does not work

I used this code to wake my device (Moto G 1 gen) when the screen is off, but it seems that it is not working. It only works when the screen is on.

edit: now it works, but CallScreen.class shows for 1 second and then ends. LogCat does not provide any information for this.

the 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(); 
0
android android-alarms
Apr 12 '15 at 15:35
source share
2 answers

OK I understood. It seems to me that FLAGS are not doing their job properly, so beef 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(); 
+1
Apr 13 '15 at 13:48
source share

ELAPSED_REALTIME_WAKEUP will only work on the CPU, and only until onReceive() your BroadcastReceiver returns.

So:

  • The CPU may fall asleep again before your activity, since startActivity() is asynchronous, and onReceive() will return before startActivity() actually begins its processing

  • ELAPSED_REALTIME_WAKEUP does not turn on the screen that you see fit

  • ELAPSED_REALTIME_WAKEUP will not unlock the device you think you need.

+1
Apr 12 '15 at 17:08
source share



All Articles