android锁屏

作者: Jafir | 来源:发表于2016-11-17 16:04 被阅读559次

废话不多说,最近两天,学习研究了一下锁屏相关,以及浮窗相关,这里整理一下。
下面是一个自己写的单词锁屏的软件。
先贴一下图,有兴趣的可以继续往下看:

shot1.png
shot2.png
shot3.png
shot4.png

now 主要说说遇到的坑和学到的技术

  • 1、6.0以上的手机使用system_alert_window权限,很特殊,需要跳转到设置里面去设置。并且,对于其他Android厂商的不同rom,如miui等更需要特殊对待。6.0以下使用的话原生的系统直接配置使用即可,但是还是其他厂商的rom需要适配。
  • 2、对于浮窗的话,目前来说,个人搜罗了网上的一些方法只有,发现廖祜秋他们的window type 是toast的方法为最佳http://www.jianshu.com/p/167fd5f47d5c , 不需要权限即可使用。但是,如果对于锁屏来说,它有一个小问题,就是它没有办法禁止状态栏下拉、返回、home等键的使用。它只是在window上面蒙了一层而已,不太适合做锁屏。但是,如果做类似小球浮窗,来电浮窗的话,是个很好的选择
  • 3、真正比较好的方式,是用window type为 TYPE_SYSTEM_ERROR的方式http://www.ay27.com/2015/01/24/2015-01-24-android-keyguard/ ,这种方式能够很好的禁止状态栏下拉(沉浸式),home,返回键等操作,完美。
  • 4、这两种方式都可以交互
  • 5、锁屏是记单词的锁屏,用到了数据库,目前没有找到好的开源API,所以只有去网上找db或者sql自己生成。加载的时候需要新开线程操作,加载好了之后才使用。
  • 6、我的加载单词的策略:一天加载20个,在词库中随机选20个,然后一天之内所有出现的单词都在这20个当中。加载数据库的时候,只有每天的第一次加载才会加载,不必每次都加载。
  • 7、数据库:realm ,比较坑,它很强大,但是有个小地方,不支持list<String > String[]。
  • 8、软键盘里面的完成按钮,setImeOptions(EditorInfo.IME_ACTION_DONE);需要在代码里设置,有时候xml里设置不管用
  • 9、用到了正则过滤中文、英文、符号等方法
  • 10、这里用到了监听开屏的广播,不是用的"android.intent.action.SCREEN_ON",因为它需要动态注册在xml中注册无效。而是用的是"android.intent.action.USER_PRESENT",这个是相当于,用户界面展示的监听,也就是你从锁屏进入home界面的监听,那时候,我们就可以跳转我们的锁屏界面了。
  • 11、还有关于一天只执行一次的算法策略问题。
  • 12、有一点小问题就是,有时候熄屏只有过不了多久,进程会死,死了之后就监听不到系统广播了,这点我还在研究改进,希望大家快来交流

好了,其实说也白说,给代码吧,还是自己去看代码最实在。

代码写得丑,但是相信肯定有值得你学习的地方

点击跳转项目地址
APK地址

相关文章

网友评论

  • 随便_111a:请教一个问题,就是当输入单词以后,会自动跳转到应用的主页面,有没有什么设置能直接跳转到关闭屏幕前的应用而不是继续留在这个应用里?
    Jafir:@随便_111a 兄弟 我的这个锁屏就是你说的这样啊。你试过么
    随便_111a:@Jafir 是的,精确一点的例子就是,关闭屏幕是微信的界面,重新screen on以后会出现单词锁屏的页面,然后输入单词解锁以后,目前是会进入到这个应用的主界面(也就是Launcher),但是用户一般正常的习惯是单词解锁以后还是回到微信。你对这个有什么想法吗?
    Jafir:@随便_111a @随便_111a 你好 你指的应用的主界面是launcher吧?跳转到关闭屏幕前的应用界面的意思是 你在关闭屏幕前有一个应用,你直接关闭了屏幕,再打开锁屏然后还是到原来那个应用界面么
  • 西红柿的眼泪:兄弟,这个项目地址怎么点不进去呢?
    Jafir:@西红柿的眼泪 好了

本文标题:android锁屏

本文链接:https://www.haomeiwen.com/subject/wqidpttx.html