我的应用程序是在汽车停靠事件中启动的,我想在我插入设备时唤醒手机(由系统完成)并解锁屏幕。 是不可能的?
答案 0 :(得分:42)
我用于将活动提升到顶级
private Window wind;
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
/******block is needed to raise the application if the lock is*********/
wind = this.getWindow();
wind.addFlags(LayoutParams.FLAG_DISMISS_KEYGUARD);
wind.addFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED);
wind.addFlags(LayoutParams.FLAG_TURN_SCREEN_ON);
/* ^^^^^^^block is needed to raise the application if the lock is*/
}
答案 1 :(得分:21)
使用Activity.getWindow()获取活动窗口;使用Window.addFlags()在WindowManager.LayoutParams中添加您想要的以下标志中的任何一个:FLAG_DISMISS_KEYGUARD,FLAG_SHOW_WHEN_LOCKED,FLAG_TURN_SCREEN_ON
这是标准汽车停靠站(和桌面停靠站)应用程序实现此行为的方式。
答案 2 :(得分:4)
您只能将FLAG_DISMISS_KEYGUARD
用于没有安全保护锁定的手机,例如模式锁定。
FLAG_SHOW_WHEN_LOCKED
只会将您当前的活动置于最高位置,如果用户尝试移动到其他位置,则必须解锁屏幕。
或者,您可以在清单中添加权限:
<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
并且,在您的创建活动中:
KeyguardManager manager = (KeyguardManager) this.getSystemService(Context.KEYGUARD_SERVICE);
KeyguardLock lock = manager.newKeyguardLock("abc");
lock.disableKeyguard();
答案 3 :(得分:4)
当使用锁定模式或引脚条目时,我还需要添加以下内容,因为屏幕在不到5秒的时间内关闭:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);