唤醒设备的正确的、未弃用的方法是什么?
what is the proper, non-deprecated way to wake up the device?
我的要求是:GCM消息到达后,设备应该唤醒显示高优先级通知。设备 应该会打开屏幕 。
目前我正在使用 WakeLock 来实现这一点。 newWakeLock()
方法需要传递一个锁定级别和一个标志(作为第一个参数,按位或运算)。
我正在使用 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
)
使用我从我的问题中得到的代码,然后完成 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();
}
我的要求是:GCM消息到达后,设备应该唤醒显示高优先级通知。设备 应该会打开屏幕 。
目前我正在使用 WakeLock 来实现这一点。 newWakeLock()
方法需要传递一个锁定级别和一个标志(作为第一个参数,按位或运算)。
我正在使用 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
)
使用我从我的问题中得到的代码,然后完成 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();
}