DirectBoot(简称DB)是Android N新引入的一个特性,本质上是对数据访问做了限制。在用户开机但未解锁之前,应用只能访问这个安全区内的数据,从而保护用户隐私安全。
Android N上把数据分成了两块,分别是:
1、凭据保护存储区(credential-protected),这是所有应用的默认存储位置,仅在用户解锁设备后可用。
2、设备保护存储区(device-protected),这是一个新的存储位置,当设备启动后(包括DB阶段)随时都可访问该位置.
由于在DB模式下,用户没有办法访问到凭据保护保护存储区,所以在这个时刻访问sharedPreference时会报错,所以需要在DB模式下访问sharedPreference时需要增加判断,以免程序崩溃。
判断设备当前是否在DB模式:
public static boolean isDirectBootMode(Context context) {
boolean enabled = false;
DevicePolicyManager devicePolicyManager = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
if (devicePolicyManager != null) {
try{enabled=devicePolicyManager.getStorageEncryptionStatus()==DevicePolicyManager.ENCRYPTION_STATUS_ACTIVE_PER_USER;
} catch (IllegalStateException e) {
return enabled;
如果在DB模式下访问sharedPreference需要做如下处理:
if (StateUtils.isDirectBootMode(context)) {
final Context deviceContext = context.createDeviceProtectedStorageContext();
context=deviceContext //将context替换调再访问
} else {
//todo
要使app在Direct Boot模式下能运行,除了在Manifest里进行的显示声明外(android:directBootAware=”true”),需要将在Direct Boot模式下运行时涉及的数据存储到Device protected storage,注意只应该将能使app在Direct Boot模式下运行必须的数据存放在Device protected storage,其他的一些用户敏感数据应该放在Credential protected storage,要访问Device protected storage,需要在使用所有文件相关的API时,用以下的Context(
context.createDeviceProtectedStorageContext()),可以使用moveSharedPreferencesFrom() 和Context.moveDatabaseFrom() 对原来的数据进行转存.
AMS的systemReady中,startHomeOnAll
Di
splays,起的是com.
android
.settings/.FallbackHome ,
几秒后才起 com.***.***/.DefaultActivity。
开机动画结束后进入开机向导前出现黑屏的原因是:
开机向导没有设置过
android
:
di
rect
Boot
Aware="true"属性,因此它必须要等动画结束,ACTION_USER_UNLOCKED发送后,fallbackhome才能退出并加载启动开机向导,这样就会引起黑屏现象。
di
rect
boot
Android
brings various features for users and developers, one such feature was added in
Android
7, called
Di
rect
Boot
, but what exactly is
Di
rect
Boot
? Let’s try to find that in the next few m...
当手机已经通电开机但是用户并有解锁锁屏的时候,
Android
N运行于一个安全的
模式
,也就是
Di
e
rect
Boot
模式
。
为了支持
Di
e
rect
Boot
模式
,系统提供了两个存储数据的地方:
1.Credential encrypted storage,默认存储数据的地方,仅在用户解锁手机后可用。2.Device encrypted storage,主要对应的就是
Di
rect
Boot
使用的...
安卓各个可以在application、Service、Receiver等组件下加
android
:
di
rect
Boot
Aware标签提前启动这些组件,被称为直接启动
模式
。那这个参数的意义是啥?
Di
rect
Boot
阻塞开机
Di
rect
Boot
介绍
当设备已开机但用户尚未解锁设备时,
Android
7.0 将在安全的“直接启动”
模式
下运行。为支持此
模式
,系统为数据提供了两个存储位置:
(Credential encrypted storage)凭据加密存储,这是默认存储位置,仅在用户解锁设备后可用。
(Device encrypted storage)设备加密存储,该存储位置在“直接启动”
模式
下和用户解锁设备后均可使用。
默认情况下,应用不会在
Di
rect
Boot
模式
下运行,如果需要在该
模式
在
Android
M及之前,当开机启动到锁屏界面时,所有程序阻塞,等待用户解锁(即使未设置开机密码,也需要滑屏解锁)后才会继续。
而
Android
7.0引入了
Di
rect
Boot
模式
,当手机已经通电开机但是用户并有解锁锁屏的时候,
Android
N运行于一个安全的
模式
,也就是
Di
e
rect
Boot
模式
。
而
Di
rect
Boot
模式
下,仅限于运行一些关...
Di
rect
Boot
Mode—— 设备启动后进入的一个新
模式
,直到用户解锁(unlock)设备此阶段结束。
在此
Di
rect
Boot
Mode 下 APP 比较适合做一些:
Alarm、clock 类的操作,如闹钟需要做重要的或紧急的通知,如短信应用底层服务类,如辅助工具服务
请注意,以上并非详尽的用例列表,我们期待看到还有哪些类
问题:自己写了一个应用,在systemserver.java里指定包名和类名使用Intent启动,竟然启动不了?但是使用
am start命令可以启动,发现系统应用需要在
Android
Manifest.xml声明
android
:defaultToDeviceProtectedStorage=”true”
1.在
Android
Manifest.xml里添加
<application
为了支持
Di
e
rect
Boot
模式
,系统提供了两个存储数据的地方:
1.Credential encrypted storage,默认存储数据的地方,仅在用户解锁手机后可用。
2.Device encrypted storage,主要对应的就是
Di
rect
Boot
使用的存储空间。在
Di
rect
Boot
模式
下和用户解锁手机后都可以使用的存储空间
一般情况下,应用是无法在
Di
rect
Boot
...
Android
N 引入了一个新的特性
Di
rect
Boot
Mode
,设备启动后进入一个新的
模式
,直到用户解锁后,此
模式
才会消失。此时若想启动应用,应用必须先向系统注册其组件,然后才能在
Di
rect
Boot
Mode
模式
下运行或访问设备加密存储。 应用通过将组件标记为“加密感知”来注册系统。
若要将您的组件标记为加密感知,请在
Android
Manifest.xml中将
android
:...