Android 7.0 ----- Direct Boot模式(AppClock)
本文针对闹钟应用对于此次Android 7.0增加DB模式所需要的应对方式。
Direct Boot模式:设备已开机但用户尚未解锁设备时,Android 7.0 将在安全的“直接启动”模式下运行。
简单来说,如果不做处理,在手机开机锁屏的情况下(DB模式),设置的闹钟是无法使用的。
开发者网站请参考:支持“直接启动”模式 | Android 开发者 | Android Developers
应对方式:
1.请求在DB模式下运行
默认情况下,应用不会在“直接启动”模式下运行。如果应用需要在DB模式下执行操作,需要注册应在此模式下运行的应用组件。应用通过将组件标记为加密感知来向系统注册,然后才能在“直接启动”模式下运行或访问设备加密存储。
android:directBootAware="true"
当设备重启后,加密感知组件可以注册以接收来自系统的ACTION_LOCKED_BOOT_COMPLETED广播消息。此时,设备加密存储可用。
<action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
2.接收用户解锁通知
当用户在重启后解锁设备时,应用可以切换至访问凭据加密存储,并使用依赖用户凭据的常规系统服务。
需立即获取通知的前台进程,监听ACTION_USER_UNLOCKED消息。
<action android:name="android.intent.action.USER_UNLOCKED" />
对延迟通知执行操作的后台进程,监听ACTION_BOOT_COMPLETED消息。
<action android:name="android.intent.action.BOOT_COMPLETED" />
也可以通过调用userManager.isUserUnlocked(),直接查询用户是否已解锁设备。
AppClock遇到的问题:
1.开机的时候,闹钟到时不响被miss掉了。分析log发现是:
当用户使用手机时(flip打开,屏幕on的状态下)。一个闹铃响铃,用户在通过非代码设定的按键而离开响铃界面(像是误操作等原因),此时会把这个闹铃置位missed状态,同时关闭响铃、发送notification。
if (AlarmSubLcd.isFlipOpen(mContext) == true && mIsScreenOn == true) {missed();
}
处理方法:将此方法所在的组件在清单中注册
android:showWhenLocked="true"
将此组件浮在锁屏界面的上方,返回即进入解锁界面。
2.在DB模式下,概率性出现闹钟到时不响(解锁后闹钟可响,过时闹钟被miss掉)
这个问题给我整emo了两天,通常概率性bug是线程的事。从log中分析出来,不知道是谁把alarmInstance的状态从fire变成了miss,导致闹钟到时不响。后来从crash log发现,在DB模式下,clock的widget crash了。DB模式下,不能调用updateWidget()方法。
处理方法:
通过调用userManager.isUserUnlocked()是否已解锁设备,解锁设备后再调用updateWidget()方法。
UserManager mUserManager = context.getSystemService(UserManager.class);
if (mUserManager.isUserUnlocked()) {UpdateWidget();
}
Android 7.0 ----- Direct Boot模式(AppClock)相关推荐
- Anroid 7.0 Direct Boot研究
为了支持Dierect Boot模式,系统提供了两个存储数据的地方: 1.Credential encrypted storage,默认存储数据的地方,仅在用户解锁手机后可用. 2.Device en ...
- Android 7.0 多窗口模式
多窗口模式简介 由于手机屏幕大小的限制,传统情况下一个手机只能同时打开一个应用程序.从Android 7.0 开始引入多窗口模式功能,如许在一个屏幕中同时打开两个应用程序. 进入多窗口模式 注意:使用 ...
- android 画中画模式自定义,Android 8.0 Oreo 画中画模式
Android 8.0 Oreo(API Level 26)允许活动启动画中画 Picture-in-picture(PIP)模式.PIP 是一种特殊类型的多窗口模式,主要用于视频播放.PIP 模式已 ...
- android 6.0省电,谷歌发话:强制开启Android 6.0省电模式和全盘加密
原标题<谷歌发话了:谁都不许动省电模式和全盘加密>,IT之家编辑酌情修改. 日前谷歌已经发布了Android 6.0 Marshmallow的源码,手机厂商们正在加紧为旗下设备的适配工作, ...
- Android 11.0 进入recovery模式(等待用户选择recovery模式界面)进入自动恢复出厂设置模式
1.概述 在定制11.0的产品的时候,由于没有音量键 所以用音量键和电源键来选择recovery模式就无法实现了 所以当进入recovery选择模式界面 就一直停在那里 根据需要 要修改成进入等待用户 ...
- Android 10.0 进入recovery模式(等待用户选择recovery模式界面)实现自动恢复出厂设置
1.概述 在10.0 的产品由于没有音量键 所以用音量键和电源键来选择recovery模式就无法实现了 所以当进入 recovery选择模式界面 就一直停在那里 根据需要 要修改成进入等待用户选择re ...
- android 12.0去掉recovery模式UI页面的选项
1.概述 在12.0进行定制化开发,会根据需要去掉recovery模式的一些选项 就是在device.cpp去掉一些选项就可以了 2.去掉recovery模式UI页面的选项核心代码 bootable/ ...
- Android 9.0 进入recovery模式 自动恢复出厂设置的定制化
1.概述 在9.0 设备中,由于定制的设备没有音量+和音量-按键,所以通过手动选择recovery选择界面的模式时,就不能选择进入哪种模式,这时就需要进入recovery的时候,默认进入恢复出厂设置模 ...
- Android 12.0 进入recovery模式(等待用户选择recovery模式界面)进入自动恢复出厂设置模式
目录 1.概述 2.进入recovery模式(等待用户选择recovery模式界面)进入自动恢复出厂设置模式的核心类
最新文章
- 嵌入式系统学习笔记之五-uboot常用命令之补充
- 贝叶斯网络之父Judea Pearl:新因果科学与数据科学、人工智能的思考
- k8s源码架构目录分析
- linux下获取本机的获取内网和外网地址
- 新成立的Scala中心将重点关注教育和Scala社区
- 我国计算机体系结构相关产业,中国工程院院士吴汉明:发展我国半导体产业,力求颠覆传统计算机体系结构...
- [Oracle]使用滚动游标
- recovery模式下支持ADB连接和串口操作
- python代码200行左右_200行Python代码实现2048
- Google TakeOut图片下载器
- C++编程语言中const关键字介绍
- 【转】Java杂谈(九)--Struts
- 使用rkhunter检测rootkit
- 计算机网络技术基础第二章答案,计算机网络技术基础各章节综合练习题及答案...
- TwinCAT3入门使用经验
- java 地心坐标系(ECEF)和WGS-84坐标系(WGS84)互转
- spring MVC3 集成 freemarker
- Unity网格编程篇(四) 三维温度图、热力图
- Quick Viewer 快速浏览器
- Office WORD如何为每一页设置不同的页眉页脚