唤醒设备的正确,非弃用方式是什么?

Dro*_*man 16 android android-wake-lock

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

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

我正在使用PowerManager.ACQUIRE_CAUSES_WAKEUP旗帜,因为它完全符合我的需要.但是,我对锁定级别有点沮丧.所以根据文档,我有以下选择:

  • PARTIAL_WAKE_LOCK- 与ACQUIRE_CAUSES_WAKEUP屏幕不兼容/不打开屏幕
  • SCREEN_DIM_WAKE_LOCK - 已弃用
  • SCREEN_BRIGHT_WAKE_LOCK - 已弃用
  • FULL_WAKE_LOCK - 已弃用

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();
Run Code Online (Sandbox Code Playgroud)

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

编辑 我不是要求解决方法来唤醒设备.我的问题是,是否可以Activity使用不弃用的API 从后台唤醒设备(没有运行)

RuA*_*are 13

使用我从我的问题中获得的代码,然后只需完成活动,应该为用户正常的时间留下屏幕.相信我,这是唯一的方法,在这个问题上度过了一个愉快的一周.您始终可以使用notitlebar将活动设置为透明,用户永远不会知道.

@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();
}
Run Code Online (Sandbox Code Playgroud)