本文针对闹钟应用对于此次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)相关推荐

  1. Anroid 7.0 Direct Boot研究

    为了支持Dierect Boot模式,系统提供了两个存储数据的地方: 1.Credential encrypted storage,默认存储数据的地方,仅在用户解锁手机后可用. 2.Device en ...

  2. Android 7.0 多窗口模式

    多窗口模式简介 由于手机屏幕大小的限制,传统情况下一个手机只能同时打开一个应用程序.从Android 7.0 开始引入多窗口模式功能,如许在一个屏幕中同时打开两个应用程序. 进入多窗口模式 注意:使用 ...

  3. android 画中画模式自定义,Android 8.0 Oreo 画中画模式

    Android 8.0 Oreo(API Level 26)允许活动启动画中画 Picture-in-picture(PIP)模式.PIP 是一种特殊类型的多窗口模式,主要用于视频播放.PIP 模式已 ...

  4. android 6.0省电,谷歌发话:强制开启Android 6.0省电模式和全盘加密

    原标题<谷歌发话了:谁都不许动省电模式和全盘加密>,IT之家编辑酌情修改. 日前谷歌已经发布了Android 6.0 Marshmallow的源码,手机厂商们正在加紧为旗下设备的适配工作, ...

  5. Android 11.0 进入recovery模式(等待用户选择recovery模式界面)进入自动恢复出厂设置模式

    1.概述 在定制11.0的产品的时候,由于没有音量键 所以用音量键和电源键来选择recovery模式就无法实现了 所以当进入recovery选择模式界面 就一直停在那里 根据需要 要修改成进入等待用户 ...

  6. Android 10.0 进入recovery模式(等待用户选择recovery模式界面)实现自动恢复出厂设置

    1.概述 在10.0 的产品由于没有音量键 所以用音量键和电源键来选择recovery模式就无法实现了 所以当进入 recovery选择模式界面 就一直停在那里 根据需要 要修改成进入等待用户选择re ...

  7. android 12.0去掉recovery模式UI页面的选项

    1.概述 在12.0进行定制化开发,会根据需要去掉recovery模式的一些选项 就是在device.cpp去掉一些选项就可以了 2.去掉recovery模式UI页面的选项核心代码 bootable/ ...

  8. Android 9.0 进入recovery模式 自动恢复出厂设置的定制化

    1.概述 在9.0 设备中,由于定制的设备没有音量+和音量-按键,所以通过手动选择recovery选择界面的模式时,就不能选择进入哪种模式,这时就需要进入recovery的时候,默认进入恢复出厂设置模 ...

  9. Android 12.0 进入recovery模式(等待用户选择recovery模式界面)进入自动恢复出厂设置模式

    目录 1.概述 2.进入recovery模式(等待用户选择recovery模式界面)进入自动恢复出厂设置模式的核心类

最新文章

  1. 嵌入式系统学习笔记之五-uboot常用命令之补充
  2. 贝叶斯网络之父Judea Pearl:新因果科学与数据科学、人工智能的思考
  3. k8s源码架构目录分析
  4. linux下获取本机的获取内网和外网地址
  5. 新成立的Scala中心将重点关注教育和Scala社区
  6. 我国计算机体系结构相关产业,中国工程院院士吴汉明:发展我国半导体产业,力求颠覆传统计算机体系结构...
  7. [Oracle]使用滚动游标
  8. recovery模式下支持ADB连接和串口操作
  9. python代码200行左右_200行Python代码实现2048
  10. Google TakeOut图片下载器
  11. C++编程语言中const关键字介绍
  12. 【转】Java杂谈(九)--Struts
  13. 使用rkhunter检测rootkit
  14. 计算机网络技术基础第二章答案,计算机网络技术基础各章节综合练习题及答案...
  15. TwinCAT3入门使用经验
  16. java 地心坐标系(ECEF)和WGS-84坐标系(WGS84)互转
  17. spring MVC3 集成 freemarker
  18. Unity网格编程篇(四) 三维温度图、热力图
  19. Quick Viewer 快速浏览器
  20. Office WORD如何为每一页设置不同的页眉页脚

热门文章

  1. 云直播SDK核心功能对比|腾讯云、阿里云、声网、即构等SDK厂商对比
  2. CLOB与BLOB的区别及用途
  3. SPA、MPA 的优缺点
  4. 菜鸟初识脚本 and 脚本语言
  5. 科大讯飞胡郁:我所领导的超脑项目,代表了AI的未来
  6. DeFi明斯基时刻:压力测试与启示
  7. 苹果手机闹钟声音大小怎么调_苹果闹钟不响、声音小怎么办?
  8. Java+MySQL基于ssm的物理竞赛管理系统
  9. android中小火箭动态喷射动画的简单实现
  10. Keras深度学习实战(35)——构建机器翻译模型