我正在尝试通过锁屏显示活动。 这是我的应用程序中的第二个,第一个实际上没有任何问题。 我正在使用唤醒锁:
PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE);
//mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
mWakeLock.acquire();
我正在使用活动本身的预期代码
"getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
我甚至尝试过这个选项:
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.flags |= WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED;
lp.flags |= WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD;
lp.flags |= WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON;
lp.flags |= WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
getWindow().setAttributes(lp);
这两项活动之间的最大区别在于它们的展示时间。 第一个(那个正在工作的那个)对android.provider.Telephony.SMS_RECEIVED广播做出反应,而第二个对Intent.ACTION_POWER_CONNECTED广播做出反应。
为什么第二个不起作用?锁屏不会被移除以显示我的活动,如果我实际滑动锁屏,我的活动就会显示在其下方。 实际上插电能力是不是可以拦截?
/编辑:
我确实发现了两个活动之间的区别: 实际上没有工作的人有一个基于对话主题的主题。
<style name="ThemeWithCorners" parent="android:Theme.Holo.Light.Dialog">
如果我删除它,它工作得很好,所以现在的问题是如何让基于对话主题的活动以相同的方式运行???
/ EDIT2: 经过一些谷歌搜索和搜索,我发现这段代码有效:
KeyguardManager keyMgr = (KeyguardManager) getSystemService(KEYGUARD_SERVICE);
KeyguardManager.KeyguardLock keyLock = keyMgr.newKeyguardLock(TAG);
keyLock.disableKeyguard();
糟糕的是newKeyguardLock()方法已被弃用。所以它在将来的版本中可能不再起作用(在4.1.2上测试)。 如果有人知道正确的方式来完成同样的壮举吗?