最近在搜狗输入法实习,研究了一下android系统的锁屏问题,记录一下,相互学习!
android锁屏分系统自带的锁屏和第三方的锁屏。
1、系统自带的锁屏的修改需要改android源码,不同的手机厂商可以做好自己的锁屏样式然后烧到自己生产的手机中,
如华为,小米...,都有自己风格的锁屏。
2、第三方锁屏的机制是:在手机开关屏幕时,系统会发出ACTION_SCREEN_ON和ACTION_SCREEN_OFF广播,
通过截获这些广播,设置自己的锁屏view并且屏蔽掉home键和back键等,即可实现第三方锁屏。
关于锁屏时类似QQ弹出消息的机制:
参考链接 http://www.eoeandroid.com/thread-540944-1-1.html
http://stackoverflow.com/questions/21852203/android-how-to-completely-disable-keyguard
首先弹出的activity只需重写上面的onAttacedToWindow方法即可;
FLAG_SHOW_WHEN_LOCKED和FLAG_DISMISS_KEYGUARD是关键,这两个替代了以前版本里的KeyguardLock类的功能。
FLAG_DISMISS_KEYGUARD和FLAG_SHOW_WHEN_LOCKED的描述参见android官方文档 http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_DISMISS_KEYGUARD
自己试验后得到的结论为:
FLAG_DISMISS_KEYGUARD可以解除系统不安全的锁屏,比如滑动解锁,安全的锁屏仍需解锁。系统自带的锁屏时没法突破的。
对于第三方的锁屏,比如锁屏精灵、GO锁屏什么的,由于其实现机制为得到广播然后显示view,所以是可以屏蔽掉的。
方法为:
自己写一个service用来截获屏幕关闭和点亮的广播,然后在onReceiver里丢弃掉(abortBroadcast())
这个广播(这个广播好像是顺序广播,可以被丢弃),
另外需要设置自己的这个截获广播的filter的优先级为最高,方法为filter.setPriority(1000);
以上即为类似QQ屏幕弹窗的实现,以及弹窗时锁频的处理。这只是自己的探索结果,可以参考,自己尝试。