親測有效??!
項目中發(fā)現(xiàn)在自動更新功能的時候,下載好了apk的文件后在android7.0系統(tǒng)中不能自動跳到安裝界面,后來百度了一番解決了問題。
原因:
我們先來看看產生的原因:當我們在7.0上使用系統(tǒng)服務去下載apk并且試圖安裝時,有可能由于權限問題導致安裝失敗。
每個Android版本的發(fā)布,對于安全性問題的要求越來越高,也為Android程序員增加了額外的工作量。Android6.0引入動態(tài)權限控制(Runtime Permissions),Android7.0引入私有目錄被限制訪問和StrictMode API 。私有目錄被限制訪問是指在Android7.0中為了提高應用的安全性,在7.0上應用私有目錄將被限制訪問,這與iOS的沙盒機制類似。StrictMode API是指禁止向你的應用外公開 file:// URI。 如果一項包含文件 file:// URI類型 的 Intent 離開你的應用,則會報出異常。
更新步驟:
1.調接口判斷是否需要進行更新。
2.更新進行apk文件的下載。
3.下載完畢后自動跳轉到更新頁面。
解決方法:
我的問題主要是出現(xiàn)在第三步,下載好了apk文件后不能跳轉,下面來看如何解決
1.manifest進行注冊:加在<apllication>節(jié)點下
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="你的包名.fileprovider"
android:grantUriPermissions="true"
android:exported="false">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
2.xml文件編寫:
在res文件下新建xml文件夾,編寫file_paths:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<paths>
<external-path path="" name="download"/>
</paths>
</resources>
3.寫跳轉代碼:
if(Build.VERSION.SDK_INT>=24) {//判讀版本是否在7.0以上
Uri apkUri = FileProvider.getUriForFile(this, "你的包名.fileprovider", apkFile);//在AndroidManifest中的android:authorities值
Intent install = new Intent(Intent.ACTION_VIEW);
install.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
install.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);//添加這一句表示對目標應用臨時授權該Uri所代表的文件
install.setDataAndType(apkUri, "application/vnd.android.package-archive");
startActivity(install);
} else{
Intent install = new Intent(Intent.ACTION_VIEW);
install.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive");
install.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(install);
}
主要就是判斷下如何使大于等于7.0系統(tǒng),通過FileProvider類來獲取到apk文件。
**
還有注意一點,6.0以上動態(tài)權限獲取。**demo下載https://github.com/snyqm/update_demo
原文:http://m.blog.csdn.net/article/details?id=62418408
適配相關:
android7.0:http://www.itdecent.cn/p/470359cbfb78
android8.0:http://www.itdecent.cn/p/96b7b39dcc9c
android9.0:http://www.itdecent.cn/p/9415f83df810