android 锁屏解决方案,Android 实现锁屏的较完美方案
实现锁屏的方法,其实上网一搜一大把,无非是告诉你在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 实现锁屏的较完美方案相关推荐
- electorn 白屏解决方案(偶发性白屏)
百度了半天感觉都不靠谱,最终查阅官方文档找到问题所在-------渲染进程崩溃 可以通过监听`render-process-gone`事件捕获到崩溃的消息,检测到之后重新加载 代码如下 app.on( ...
- android 闪退解决方案,Android apk无法安装及闪退问题解决办法
Android apk无法安装及闪退问题 app在部分手机上(低版本)打不开或打开就闪退的问题 之前做项目集成的是 环信的sdk ,环信的sdk 确实很好,客服 也很给力.但是在集成的过程中发现,ap ...
- android兼容小米xiaomi刘海屏解决方案
引用自小米官方文档,这里缩减了一些内容,捡取重要内容. 转载请标明出处: https://blog.csdn.net/DJY1992/article/details/80688376 本文出自:[奥特 ...
- android兼容oppo手机刘海屏解决方案
引用自OPPO官方文档,这里缩减了一些内容,选取重要内容,包括oppo沉浸式的兼容. 转载请标明出处: https://blog.csdn.net/DJY1992/article/details/80 ...
- 【转载】关于Android各个类型手机兼容刘海屏解决方案
引用自小米官方文档,这里缩减了一些内容,捡取重要内容. 转载请标明出处: https://blog.csdn.net/DJY1992/article/details/80688376 本文出自:[奥特 ...
- android兼容huawei手机刘海屏解决方案
引用自华为官方文档:doc/50114 ,这里缩减了一些内容,捡取重要内容. 转载请标明出处: https://blog.csdn.net/djy1992/article/details/806835 ...
- 【Android 性能优化】应用启动优化 ( 阶段总结 | Trace 文件分析及解决方案 | 源码分析梳理 | 设置主题的方案总结 ) ★
文章目录 一. 常用的耗时方法优化方案 ( 重要 ) 二. 源码分析梳理 1. 应用启动时间计算相关源码分析 2. Launcher 应用中启动 Android 应用流程 三. 启动白屏解决方案 An ...
- android 锁屏音量,Android锁屏状态获取音量按键事件
Android系统没有提供音量按键的广播,而Activity的onKeyDown方法只有在界面显示时才能捕获音量变化, 要在锁屏状态或后台获得音量按键事件,可以通过判断音量值的改变来判断是否按下了音量 ...
- Android 8.0 蓝牙唤醒 Ble 锁屏 保活 后台 持续扫描 进程拉活 自动唤醒
主要是api的说明,嫌啰嗦的可以直接看demo,demo中有个检测锁屏时间重复开启扫描的代码,主要是如果APP没有获得电量或者后台运行的权限,只能持续后台运行几小时. 这个demo的作用是实现8.0以 ...
最新文章
- [AGC018 B] Sports Festival 解题报告
- MYSQL中replace into的用法
- 没有J2EE容器的JNDI和JPA
- 数据分析:复杂业务场景下,量化评估流程
- 数据结构与算法分析(二)——C++实现链表
- SQLite 入门教程(四)增删改查,有讲究 (转)
- linunx 系统一键安装lnmp1.5 之后开启extension=php_fileinfo.dll 报错处理方法
- WPS表格 JSA 学习笔记 - 实现贪吃蛇
- vueminder ultimate 2020中文版(电脑桌面日历工具) v2020.07
- oracle服务名XDB_Oracle XDB和XPT
- android 弹幕 计算碰撞轨道,GitHub - imtaotao/danmuku: 高度自定义弹幕样式,碰撞检测,你值得拥有 ...
- php架构师培训,php架构师培训效果怎么样
- sci四区大水刊 计算机,sci四区大水刊_sci四区免费大水刊_sci四区什么水平
- 基于单片机的温湿度监测系统设计(程序)
- Tensorflow中的多层感知器学习
- 毫米波雷达(一):原理
- 哈佛大学计算机专业研究生排名,2019USnews美国大学ece研究生专业新排名诞生
- android bitmap FileInputStream File转化
- 晶体管是什么,它的作用有哪些
- java毕业设计项目材料管理系统源码+lw文档+mybatis+系统+mysql数据库+调试