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

时间:2015-05-21 09:15:53

标签: android android-wake-lock

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

目前我正在使用WakeLock来实现这一目标。 newWakeLock()方法期望锁定级别和标志被传递(作为第一个参数,按位或' d)。

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

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

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

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

1 个答案:

答案 0 :(得分:12)

使用我从我的问题中获得的代码,然后只需完成活动,应该为用户保持正常的时间。相信我,这是唯一的方法,在这个问题上度过了一个愉快的一周。您始终可以使用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();
}