Android 7.0 新特性--Direct Boot

Direct Boot (Android Development Patterns S3 Ep 8)

官网视频链接:
https://www.youtube.com/watch?v=fb2Zwmc3Sp4

官网博客介绍链接:
http://android-developers.blogspot.com/2016/04/developing-for-direct-boot.html?utm_campaign=android_series_blogpost_062116&utm_source=anddev&utm_medium=yt-desc

What is Direct Boot?
从Android N 开始,设备启动后,用户未解锁之前,可以进入一个叫Direct Boot的模式,在这个模式下,操作系统全速运转,除非应用已经设置过可以进入Direct Boot,不然无法访问应用的数据,也就无法对应用进行相关操作。

Is Direct Boot right for my app?
但是并不是所有的应用都适用进入该模式,一些即时性需求较高的应用可以进行相应的设置,比如闹钟、消息类通讯应用、向其他应用或者系统提供服务的应用等。

Making your app Direct Boot aware
通过在Manifest文件中按如下明确指定的方式,可以让app在Direct Boot模式时运行,

<activity|provider|receiver|service  
     android:directBootAware=”true”>  

当系统进入Direct Boot模式时,会发送Intent.ACTION_LOCKED_BOOT_COMPLETED的广播,App可以监听该广播以进入Direct Boot模式,用户解锁设备后,所有app仍然能够监听到Intent.ACTION_BOOT_COMPLETED的广播。

Using the device protected storage area
在用户未解锁之前要是app能够运行,需要解锁私有的app的数据,Android N设备提供两种类型的存储位置:
1.Credential protected storage。默认的所有应用数据存储位置,只有在设备解锁后才能使用。

2.Device protected storage。新的存储类型,只要设备是启动后,随时可以访问存在在这里的数据,包括Direct boot模式时。

所以要使app在Direct Boot模式下能运行,除了前面在Manifest里进行的显示声明外,需要将在Direct Boot模式下运行时涉及的数据存储到Device protected storage,注意只应该将能使app在Direct Boot模式下运行必须的数据存放在Device protected storage,其他的一些用户敏感数据应该放在Credential protected storage,要访问Device protected storage,需要在使用所有文件相关的API时,用以下的Context,

Context deviceProtectedContext = context.createDeviceProtectedStorageContext();  
 deviceProtectedContext.openFileInput( ... )  

可以使用Context.moveSharedPreferencesFrom() 和Context.moveDatabaseFrom()
对原来的数据进行转存,

备注:可以通过以下方法直接判断设备当前的解锁状态:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/unicorn97/article/details/53053601