本来用的好好地APP却在某款手机上出现了点Home键只闪屏无法回主界面的问题,首先提出这个问题的时候头都大了,你Home键不返回了是你系统的问题啊关我应用毛事儿,结果细心查探下来,果然是应用的锅,因为应用进程被杀之后就一切正常了 - -||| 得嘞~背了!既然背了,研究下咋解决吧!记录一下备查,也给我的无知Mark一下
直接说问题的关键吧,就在下面这几行代码:
// 屏蔽系统的屏保
KeyguardManager manager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
KeyguardManager.KeyguardLock lock = manager.newKeyguardLock("KeyguardLock");
lock.disableKeyguard();
void disableKeyguard ()——屏蔽屏保
Disable the keyguard from showing.
void reenableKeyguard ()——启用屏保
Reenable the keyguard.
但是禁用disable方法并不是解锁屏幕,只是把锁屏功能禁掉了,这也导致了今天要说的这个问题,在某些系统上锁屏界面仍然存在而且并没有解锁,导致按Home键的时候Home的实际功能被锁屏界面拦截而无法进入主页。而且调用完disable这个方法后,除非应用进程被杀死,否则按电源键只是黑屏,无法锁住屏幕的。
其次,KeyguardLock对象必须是同一个才能在disable之后重新reenable,所以要使reenable生效的话要把调用disable的对象存起来便于再reenable,而且单纯的调用reenable方法是没有任何作用的,所以你锁不了其他程序打开的屏幕,有时候甚至锁不了自己曾经打开的锁(对象不是同一个的话)
所以说来,这个disableKeyguard ()——屏蔽屏保的方法还是不能随意乱用啊,所以我干脆把这部分代码去掉,问题就完美解决了!唉~辛辛苦苦搞到大半夜的问题,最终原因却只是多了一行代码,有种蛋蛋的悲哀呢~积累经验吧,骚年!
如果要在锁屏的时候把自己的activity覆盖锁屏界面显示出来的话,不妨试试下面代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
...
...
}
声明一下这个Android系统的版本是-6.0(不算是旧版本了):