应用程序下载,并在通知栏提醒下载完成。过程大概分成三步:
- 创建一个service
- 在service启动的时候创建一个广播接收者
- 当BroadcastReceiver接收到下载完成的广播时,开始执行安装
此过程兼容了Android 7.0权限限制安装功能,Android 7.0 因为设置了“私有目录被限制访问”,“StricMode API”等安全机制,因此安装时会产生FileUriExposedException错误,此错误用FileProvider解决。
-
在AndroidMenifest.xml文件中注册provider,向外提供数据的组件。其中exported="false"必须设置成false,否则会报安全异常;grantUriPermissions="true"表示授予Uri临时访问权限;authorities组件标识,一般以包名开头。
<provider android:authorities="com.nxyuntui.testproject.fileprovider" android:name="android.support.v4.content.FileProvider" android:grantUriPermissions="true" android:exported="false"> <!--元数据--> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" /> </provider>
-
指定共享的目录。在res文件下创建一个xml目录,再在xml目录下创建一个名为file_paths的资源文件。其中,file-path 表示Context.getFilesDir(),external-path表示Environment.getExternalStorageDirectory(),cache-path表示 getCacheDir()。
<?xml version="1.0" encoding="utf-8"?> <resources> <paths> <external-path path="" name="download"/> //path="" 表示共享根目录以及根目录下所有文