我制作了由 AlarmManager 安排活动启动的应用程序。即使屏幕关闭并且设备被锁定,我也想出现。
要实现这一点,请设置 Window 标志
final Window win = getWindow();
win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
| WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON);
并尝试获取屏幕锁定
if(_lock == null)
{
PowerManager pm = (PowerManager)App.getAppContext()
.getSystemService(Context.POWER_SERVICE);
_lock = pm.newWakeLock(
PowerManager.FULL_WAKE_LOCK, "ScreenOn");
_lock.acquire();
}
_lock 是在 onPause 中释放的 PowerManager.WakeLock
protected void onPause()
{
if(_lock != null)
{
_lock.release();
}
}
此代码在 onCreate 和 onRestart 中执行。如果活动尚未启动,一切正常。
但是,如果它较早启动,则屏幕不会关闭。
- onRestart 被首先调用
- 然后调用 onResume
- 立即调用 onPause
所以活动没有启动。我的问题是如何在这种情况下打开屏幕。(我正在使用 API 15)。