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() 对原来的数据进行转存.

Android DirectBoot模式相关推荐

  1. Android DirectBoot模式及其数据存储

    支持"Direct boot"模式 当设备已开机但用户尚未解锁设备时,Android 7.0 将在安全的"直接启动"模式下运行.为支持此模式,系统为数据提供了两 ...

  2. android Run模式也会出现Waiting for debugger的解决方法

    android Run模式也会出现"Waiting for debugger"的解决方法 出现"waiting for debugger"窗口是在debug模式 ...

  3. Android MVP模式 简单易懂的介绍方式

    主要学习这位大神的博客:简而易懂 Android MVP模式 简单易懂的介绍方式 https://segmentfault.com/a/1190000003927200 转载于:https://www ...

  4. android eng 模式,android 4.0 编译模式 eng - user 时遇到的有关问题

    android 4.0 编译模式 eng -- > user 时遇到的问题 关键词:android  4.0  user  eng  camera  nand  串口 平台信息: 内核:linu ...

  5. android返回后屏幕旋转了,Android recovery 模式下屏幕显示旋转

    Android recovery 模式下屏幕显示旋转 大家在网上搜索 Android屏幕旋转,成千上万的文章,但是没有几个是写recovery 模式的.难道你们只旋转正常模式下的屏幕方向,不管reco ...

  6. android doze模式源码分析,Android Doze模式启用和恢复详解

    从Android 6.0(API level 23)开始,Android提出了两个延长电池使用时间的省电特性给用户.用户管理可以在没有充电的情况下管理app的行为.当用户一段时间没有使用手机的时候,D ...

  7. Android MVC模式

    Android MVC模式     [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/details/51172105       前些天看到 ...

  8. android mvp模式

    越来越多人讨论mvp模式,mvp在android应用开发中获得更多的重视,这里说一下对MVP的简单了解. 什么是 MVP? MVP模式使逻辑从视图层分开,目的是我们在屏幕上怎么表现,和界面如何工作的所 ...

  9. Android MVP模式简单易懂的介绍方式 (一)

    Android MVP模式简单易懂的介绍方式 (一) Android MVP模式简单易懂的介绍方式 (二) Android MVP模式简单易懂的介绍方式 (三) 最近正在研究Android的MVP模式 ...

最新文章

  1. Error:Execution failed for task ':myapp:dexDebug'. com.android.ide.common.process.ProcessExcepti
  2. 字符串 mysql索引,长字符串的MySQL索引
  3. C++中substr函数的用法
  4. git push时提示:更新被拒绝,因为您当前分支的最新提交落后于其对应的远程分支
  5. 全球及中国现金自动化(管理)行业运作模式与前景趋势展望报告2022版
  6. spring的父子容器
  7. Java的并发编程中的多线程问题到底是怎么回事儿?
  8. CSS 中 的 margin、border、padding 区别 (内边距、外边距)
  9. 解决Bug:windows无法休眠/休眠只关闭屏幕
  10. LDC 1.14.0 发布,高性能 dlang 编译器
  11. 外贸Newer必备外贸流程
  12. python小游戏之外星人入侵之pygame实战应用(含源码下载)
  13. java 传感器_JAVA串口采集传感器数据
  14. 神经网络模型结果怎么看,神经网络模型怎么评估
  15. violate关键字的理解
  16. JAVA jdk8安装
  17. 写给湘大计算机相关专业的学弟学妹们
  18. 轻松通关以太坊--初识以太坊
  19. H5页面屏蔽用户长按复制黏贴
  20. MATLAB同时录音播放,用matlab录音和放音

热门文章

  1. 如何更改计算机名称及查看自己计算机的型号
  2. 线上销售额增长60%,小红书品牌企业号如何实现迭代式突破
  3. 【English】二、It作为代词,可以代指什么
  4. 华为在深度学习平台上的优化实践
  5. 项目管理之关键链法VS关键路径法
  6. 前端轮播插件banner
  7. 推荐一款视频音频剪辑软件,可免费试用
  8. ArcGIS Engine 通过线构造面
  9. 5G智慧工业 | PLC设备远程监控系统解决方案
  10. 高等几何——变换群与几何学8