【发布时间】:2013-04-27 00:23:30
【问题描述】:
我制作了由 AlarmManager 安排活动启动的应用程序。即使屏幕关闭并且设备被锁定,我也想出现。
要实现这一点,请设置窗口标志
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 是 PowerManager.WakeLock,在 onPause 中释放
protected void onPause()
{
if(_lock != null)
{
_lock.release();
}
}
此代码在 onCreate 和 onRestart 中执行。如果活动尚未启动,一切正常。
但如果之前启动过,屏幕不会关闭。
- 首先调用onRestart
- 然后调用 onResume
- 立即调用 onPause
所以活动没有启动。我的问题是如何在这种情况下打开屏幕。 (我使用的是 API 15)。
【问题讨论】:
-
发布更多代码 - 全部。什么 - _lock 在哪里?你可能的意思是“屏幕没有打开on”
-
那么锁是一个私有静态成员吗?您确定 如果活动尚未启动,一切正常?即使电话已经响起?尝试增加初始警报时间 - 我敢打赌该活动不会起作用。当我说更多代码时,我还指的是警报器和警报器接收器-您使用的是警报器接收器吗? 再次,您的意思可能是“屏幕未打开”