最近在做一个App时需要自动点亮并解锁系统屏幕,但是发现屏幕点亮后屏幕并没有解锁,还需要手动划一下。

看段代码:

mKeyguard = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);                mKeylock = mKeyguard.newKeyguardLock("");                mKeylock.disableKeyguard();

做过系统锁屏服务程序的童鞋对这段代码应该不会陌生了,他的作用就是关闭系统自带的锁屏服务。
现在的问题是在自己定制好锁屏服务后,加载apk、开启服务,然后按home键后再锁屏时,是不是出现bug,发现disableKeyguard失效,仍出现系统的锁屏。

现在对disableKeyguard方法进行分析:
在api中disableKeyguard()的介绍是
disableKeyguard():Disable the keyguard from showing.
需要权限android.permission.DISABLE_KEYGUARD

很多文档中对这个方法的补充介绍和翻译都是“通过disableKeyguard()函数来解除锁屏,通过来reenableKeyguard()反解除锁屏.reenableKeyguard()反解除锁屏的意思是:如果在调用disableKeyguard()函数之前是锁屏的,那么就进行锁屏,否则不进行任何操作。当然如果之前没调用disableKeyguard()函数,也不进行任何操作。”

后来又看了很多发布了源码的锁屏程序都出现在上面所说的home键问题,然自己对代码进行反复修改调试终于找出原因所在。网上的程序都是在服务中的接收屏幕打开或关闭的广播接收器里调用disableKeyguard方法,即每次接收到屏幕打开或关闭广播时调用disableKeyguard方法,把disableKeyguard方法当作关闭此次系统锁屏使用,而实际上disableKeyguard方法的作用是关闭掉了系统锁屏服务,只需要调用一次就行了,调用多次反而出现问题(还会造成关于关闭定制锁屏、恢复系统锁屏服务功能的bug)。

最终我的解决办法是
调用完disableKeyguard方法关闭系统锁屏服务后, 再适当的时候(即恢复系统锁屏服务时)调用reenableKeyguard方法,让他们成对调用,bug解除, 记住,要成对调用!!!

PS:转载自http://www.eoeandroid.com/thread-177610-1-1.html

更多相关文章

  1. Nginx系列教程(六)| 手把手教你搭建 LNMP 架构并部署天空网络电影
  2. android anr traces日志分析方法
  3. Android(安卓)dialog——点击「屏幕」或者「返回键」不消失
  4. 屏幕适配问题
  5. Android(安卓)onTouch 点击事件执行两次分析
  6. Android(安卓)性能优化工具
  7. Android中图片圆形设置三种方法介绍
  8. android 4.0系统webview加载网页出现白屏
  9. Android应用开发SharedPreferences存储数据的使用方法

随机推荐

  1. Android打开系统调试总开关
  2. Android(安卓)Studio 将Library上传到JCe
  3. android 应用程序调试-03
  4. Android学习笔记之RecyclerView
  5. Android图表分析的开发
  6. alarm从上层到底层完整调用流程
  7. Android实时监听网络状态
  8. android 手机号码运营商判断
  9. Android类动态加载技术
  10. Android(安卓)配置Adb环境