1. 程式人生 > >Android7.0以上自動安裝軟體

Android7.0以上自動安裝軟體

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