Droidman
Droidman

Reputation: 11608

what is the proper, non-deprecated way to wake up the device?

My requirement is: after a GCM message arrives, the device should wake up to display a high-priority notification. The device should turn the screen on.

Currently I'm using WakeLock to achieve this. The newWakeLock() method expects a lock level AND a flag to be passed (as the 1st param, bitwise or'd).

I'm using PowerManager.ACQUIRE_CAUSES_WAKEUP flag since it does exactly what I need. However, I'm a bit frustrated about the lock level. So according to the docs, I got the following options:

The suggested FLAG_KEEP_SCREEN_ON is completely useless in this scenario. I ended up just supressing the deprecation warning:

@SuppressWarnings("deprecation")
PowerManager.WakeLock screenOn = ((PowerManager) c.getSystemService(Context.POWER_SERVICE)).newWakeLock(
PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, TAG);
screenOn.acquire();
mNotifyMgr.notify(mNotificationId, mBuilder.build());
screenOn.release();

The question: is there a non-deprecated reliable way to wake up the device in the described case?

EDIT I'm not asking for workarounds to wake up the device. My question is whether this is possible to wake up the device from the background (without a running Activity) using no deprecated APIs

Upvotes: 22

Views: 11117

Answers (1)

RuAware
RuAware

Reputation: 969

Use the code I got from my question, and then just finish the activity, should leave the screen on for the users normal amount of time. Trust me this is the only way, after spending a good week on this problem. You could always set the activity to transparent with notitlebar, the user will never know.

@Override
protected void onCreate(Bundle savedInstanceState) {
    getWindow().addFlags(
        WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
        WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
        WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON |
        WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON |
        WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON);
    finish();
}

Upvotes: 14

Related Questions