唤醒设备的正确的、未弃用的方法是什么?

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

我的要求是:GCM消息到达后,设备应该唤醒显示高优先级通知。设备 应该会打开屏幕

目前我正在使用 WakeLock 来实现这一点。 newWakeLock() 方法需要传递一个锁定级别和一个标志(作为第一个参数,按位或运算)。

我正在使用 PowerManager.ACQUIRE_CAUSES_WAKEUP 标志,因为它完全符合我的需要。但是,我对锁定级别感到有点沮丧。所以根据docs,我得到了以下选项:

建议的FLAG_KEEP_SCREEN_ON在这种情况下完全没用。我最终只是压制了弃用警告:

@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();

问题:在所描述的情况下是否有未弃用的可靠方法来唤醒设备?

编辑 我不是在寻求唤醒设备的解决方法。我的问题是 是否可以使用不推荐使用的 API 从后台唤醒设备(没有 运行 Activity

使用我从我的问题中得到的代码,然后完成 activity,应该让用户在正常时间内保持屏幕打开状态。相信我,在这个问题上度过了愉快的一周之后,这是唯一的方法。您始终可以使用 notitlebar 将 activity 设置为透明,用户永远不会知道。

@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();
}