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

本来用的好好地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(不算是旧版本了):






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值