APP檢查更新應該是最常用的功能之一了吧税娜;基本每個APP都會有的
然而我們很多時候還是會遇到一些坑,比如Android 6.0跟7.0的權限問題
首先Android 6.0的權限問題我就不說了而姐,在下載文件的時候先申請系統(tǒng)的權限。
比如說這樣:java.io.FileNotFoundException: /storage/emulated/0/updata.apk (Permission denied)
當然申請權限可以解決上面的問題
說說在Android 7.0上面遇到的問題吧
首先還是得有讀寫權限;
還有一個就是在Android 7.0上會遇到:android.os.FileUriExposedException: file:///storage/emulated/0/updata.apk exposed beyond app through Intent.getData()
解決辦法:
1.在AndroidManifest.xml中添加如下代碼
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="你的APP包名.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
注意:
android:authorities=你的包名.fileprovider
android:grantUriPermissions=true 表示授予 URI 臨時訪問權限
@xml/file_paths 這里的file_paths就是我們要添加的xml文件名稱了
2.在res文件夾目錄下新建一個 xml文件夾喂窟,并在文件夾內新建一個名為file_paths.xml的文件(這樣)
3.打開file_paths.xml文件添加以下內容
<?xml version="1.0" encoding="utf-8"?>
<resources>
<paths>
<external-path path="Android/data/你的APP包名/" name="files_root"/>
<external-path path="." name="external_storage_root"/>
</paths>
</resources>
注意:
external-path path="Android/data/你的APP包名/" 表示授權訪問路徑
name="files_root" 表示路徑名稱
4.修改代碼部分,適配Android 7.0
Intent intent = new Intent();
//執(zhí)行動作
intent.setAction(Intent.ACTION_VIEW);
//判斷是否是AndroidN以及更高的版本央串,兼容7.0以上安卓版本
if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.N) {
Uri contentUri = FileProvider.getUriForFile(context,"你的APP包名.fileprovider",file);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setDataAndType(contentUri,"application/vnd.android.package-archive");
}else{
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setDataAndType(Uri.fromFile(file),"application/vnd.android.package-archive");
}
context.startActivity(intent);
到這里是不是Android 7.0的適配好用了磨澡,是不是。
如果有遇到相機適配的可以看我的另外一篇文章
解決Android 7.0(N)調用相機報錯