实现锁屏的方法,其实上网一搜一大把,无非是告诉你在Screen Off的时候启动某个Activity,同时把Keyguard禁用掉,但是通常情况下,似乎很难解决HOME键能解锁的这么一个问题,今天我们就来讲一个方案,就是如何近乎完美的实现我们的锁屏。

我们知道,锁屏的界面显示是使用KeyguardViewManager进行添加的,但是这个类属于Android的内部类,我们调用不到,它属于com.android.internal.policy.impl这个包,源码地址:https://github.com/android/platform_frameworks_policies_base/blob/mast...

我们可以看到它似乎是使用WindowManager添加View的方式实现了锁屏界面的添加,而不是使用传统的Activity的方式。

那么使用WindowManager是我们可行的方案,它的好处就是可以屏蔽Home键的触发,同时可以做一些特殊的动画效果。

我们首先开启一个Service,在Service中注册SREEN_OFF的广播,触发广播的时候,使用WindowManager加入锁屏页面,实现锁屏即可。

看下我们的Receiver代码:

javaif (action.equals(Intent.ACTION_SCREEN_OFF)) {

ViewParent viewParent = mContainer.getParent();

if (viewParent != null) {

return;

}

mKeyguardLock.disableKeyguard();

WindowManager windowManager = (WindowManager)getSystemService(WINDOW_SERVICE);

WindowManager.LayoutParams lp = generateLayoutParams();

windowManager.addView(mContainer, lp);

}

private WindowManager.LayoutParams generateLayoutParams() {

WindowManager windowManager = (WindowManager)getSystemService(WINDOW_SERVICE);

Display display = windowManager.getDefaultDisplay();

Point size = new Point();

display.getSize(size);

WindowManager.LayoutParams lp = new WindowManager.LayoutParams();

lp.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;

lp.flags |= WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;

lp.x = 0;

lp.y = 0;

lp.format = PixelFormat.TRANSLUCENT;

return lp;

}

这里主要的是需要设置WindowManager的布局参数(LayoutParams),如果看WindowManager的源码的话,我们可以看见它的TYPE有一个TYPE_KEYGUARD,这就是系统锁屏用的类型了,但是它不提供给外部使用,因此我们只能使用级别比较高的TYPE_SYSTEM_ALERT,覆盖到锁屏的上面。format设置成TRANSLUCENT的原因是我们需要和锁屏交互的时候,锁屏后面的界面要显示出来,所以它是一个透明的层,这里没有办法,我们只能把一些交互的代码放到需要添加的View层中进行处理。

使用这种方式实现的锁屏,能较好的和Launcher或者其他界面交互(包括渐变、过渡等),而且能使得我们的锁屏界面不响应HOME键(使用Activity的方式的话,home会让我们进入到Launcher里)。

更多的内容我正在探索,敬请期待。

欢迎关注我Github 以及 @Gemini

android 锁屏解决方案,Android 实现锁屏的较完美方案相关推荐

  1. electorn 白屏解决方案(偶发性白屏)

    百度了半天感觉都不靠谱,最终查阅官方文档找到问题所在-------渲染进程崩溃 可以通过监听`render-process-gone`事件捕获到崩溃的消息,检测到之后重新加载 代码如下 app.on( ...

  2. android 闪退解决方案,Android apk无法安装及闪退问题解决办法

    Android apk无法安装及闪退问题 app在部分手机上(低版本)打不开或打开就闪退的问题 之前做项目集成的是 环信的sdk ,环信的sdk 确实很好,客服 也很给力.但是在集成的过程中发现,ap ...

  3. android兼容小米xiaomi刘海屏解决方案

    引用自小米官方文档,这里缩减了一些内容,捡取重要内容. 转载请标明出处: https://blog.csdn.net/DJY1992/article/details/80688376 本文出自:[奥特 ...

  4. android兼容oppo手机刘海屏解决方案

    引用自OPPO官方文档,这里缩减了一些内容,选取重要内容,包括oppo沉浸式的兼容. 转载请标明出处: https://blog.csdn.net/DJY1992/article/details/80 ...

  5. 【转载】关于Android各个类型手机兼容刘海屏解决方案

    引用自小米官方文档,这里缩减了一些内容,捡取重要内容. 转载请标明出处: https://blog.csdn.net/DJY1992/article/details/80688376 本文出自:[奥特 ...

  6. android兼容huawei手机刘海屏解决方案

    引用自华为官方文档:doc/50114 ,这里缩减了一些内容,捡取重要内容. 转载请标明出处: https://blog.csdn.net/djy1992/article/details/806835 ...

  7. 【Android 性能优化】应用启动优化 ( 阶段总结 | Trace 文件分析及解决方案 | 源码分析梳理 | 设置主题的方案总结 ) ★

    文章目录 一. 常用的耗时方法优化方案 ( 重要 ) 二. 源码分析梳理 1. 应用启动时间计算相关源码分析 2. Launcher 应用中启动 Android 应用流程 三. 启动白屏解决方案 An ...

  8. android 锁屏音量,Android锁屏状态获取音量按键事件

    Android系统没有提供音量按键的广播,而Activity的onKeyDown方法只有在界面显示时才能捕获音量变化, 要在锁屏状态或后台获得音量按键事件,可以通过判断音量值的改变来判断是否按下了音量 ...

  9. Android 8.0 蓝牙唤醒 Ble 锁屏 保活 后台 持续扫描 进程拉活 自动唤醒

    主要是api的说明,嫌啰嗦的可以直接看demo,demo中有个检测锁屏时间重复开启扫描的代码,主要是如果APP没有获得电量或者后台运行的权限,只能持续后台运行几小时. 这个demo的作用是实现8.0以 ...

最新文章

  1. [AGC018 B] Sports Festival 解题报告
  2. MYSQL中replace into的用法
  3. 没有J2EE容器的JNDI和JPA
  4. 数据分析:复杂业务场景下,量化评估流程
  5. 数据结构与算法分析(二)——C++实现链表
  6. SQLite 入门教程(四)增删改查,有讲究 (转)
  7. linunx 系统一键安装lnmp1.5 之后开启extension=php_fileinfo.dll 报错处理方法
  8. WPS表格 JSA 学习笔记 - 实现贪吃蛇
  9. vueminder ultimate 2020中文版(电脑桌面日历工具) v2020.07
  10. oracle服务名XDB_Oracle XDB和XPT
  11. android 弹幕 计算碰撞轨道,GitHub - imtaotao/danmuku: 高度自定义弹幕样式,碰撞检测,你值得拥有 ...
  12. php架构师培训,php架构师培训效果怎么样
  13. sci四区大水刊 计算机,sci四区大水刊_sci四区免费大水刊_sci四区什么水平
  14. 基于单片机的温湿度监测系统设计(程序)
  15. Tensorflow中的多层感知器学习
  16. 毫米波雷达(一):原理
  17. 哈佛大学计算机专业研究生排名,2019USnews美国大学ece研究生专业新排名诞生
  18. android bitmap FileInputStream File转化
  19. 晶体管是什么,它的作用有哪些
  20. java毕业设计项目材料管理系统源码+lw文档+mybatis+系统+mysql数据库+调试

热门文章

  1. linux 编译链接图
  2. manjaro 21.2.5安装deb包
  3. 联想拯救者Y7000P 2021H deepin v20.2.4设置双屏显示:切记要用集显,NAVIDA独显不生效
  4. Python 安装 uWSGI并运行一个入门示例
  5. vue商城项目开发:底部导航样式、顶部导航矩阵和轮播图
  6. k8s概念: service和ingress
  7. Linux删除整行命令
  8. Spring的使用步骤
  9. Qt IFW框架简介
  10. memcpy和strcpy的区别及memcmp和strcmp的区别