您的位置:首页 > 移动开发 > Android开发

疑难杂症之——Android点击Home键无法返回主界面,并在松开时闪现锁屏界面

2017-06-21 15:16 543 查看
本来用的好好地APP却在某款手机上出现了点Home键只闪屏无法回主界面的问题,首先提出这个问题的时候头都大了,你Home键不返回了是你系统的问题啊关我应用毛事儿,结果细心查探下来,果然是应用的锅,因为应用进程被杀之后就一切正常了 - -|||    得嘞~背了!既然背了,研究下咋解决吧!记录一下备查,也给我的无知Mark一下


直接说问题的关键吧,就在下面这几行代码:

// 屏蔽系统的屏保
KeyguardManager manager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
KeyguardManager.KeyguardLock lock = manager.newKeyguardLock("KeyguardLock");
lock.disableKeyguard();


首先说明一下KeyguardManager的内部类KeyguardLock,它有两个方法用来禁用和启用屏保:

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(不算是旧版本了):





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐