Android7.0以上自動安裝軟體
阿新 • • 發佈:2018-11-19
Android7.0發生了行為變更,禁止您的應用外部公開 file://Uri 。
如果一項包含檔案 Uri 的 Intent 離開您的應用後,則應用會出現故障,並出現 FileUriExposedException 異常。
1.在AndroidManifest.xml中新增provider ,${applicationId}代表你的完成包名
…
…
2.在res下新建xml目錄,新建file_paths 檔案
<?xml version="1.0" encoding="utf-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android"> <paths> <external-path path="" name="download"/> </paths> </resources> external-path 為外部儲存路徑 files-path 為內部儲存路徑 name的值就像是一個常量,代表這path填寫的路徑,可以在請求資料Uri 拼接使用,比如cotent://xxxx/download 就等於content://xxxx/(path裡的內容)
3.判斷系統版本大於等於7.0,自動開啟apk自動跳轉到安裝頁面
if(Build.VERSION.SDK_INT <= Build.VERSION_CODES.N){ installN(final Context context, final String fileSavePath); }else{ installDownN(final Context context, final String fileSavePath); } /* * 安裝android7.0以上的 * @param context * @param fileSavePath * */ public static void installN(final Context context, final String fileSavePath) { File file = new File(Uri.parse(fileSavePath).getPath()); String filePath = file.getAbsolutePath(); Intent intent = new Intent(Intent.ACTION_VIEW); Uri data = null; data = FileProvider.getUriForFile(context, context.getPackageName() + ".fileprovider", new File(filePath)); intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);/*給目標設定一個臨時授權*/ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setDataAndType(data, "application/vnd.android.package-archive"); context.startActivity(intent); }
/*
* 安裝android7.0以下的
* @param context
* @param fileSavePath
* */
public static void installDownN(final Context context, final String fileSavePath) { File file = new File(Uri.parse(fileSavePath).getPath()); Intent intent = new Intent(Intent.ACTION_VIEW); Uri data = null; data = Uri.fromFile(file); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setDataAndType(data, "application/vnd.android.package-archive"); context.startActivity(intent); }
更詳細請瀏覽https://blog.csdn.net/One_Month/article/details/79657140?utm_source=blogxgwz7