Android7.0、8.0 apkインストール

2170 ワード

動的権限の構成
ファイルをダウンロードするにはダイナミック権限が必要です
リファレンスhttps://blog.csdn.net/qq_27400335/article/details/79412774
 
8.0の構成に必要な権限
(Android 8.0以降は未知のソースのapkを直接インストールすることはできません(google playに載っていないものはすべて未知のソースです))
権限の追加
apk( )
着信apk File起動インストール
public static void installAPK(Context context,File file){
    try {
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && Build.VERSION.SDK_INT< Build.VERSION_CODES.O) {
            //         7.0   8.0
            Log.i("TAG_Success","7.0+    ");
            Uri apkUri = FileProvider.getUriForFile(context, "  .fileProvider", file);
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            intent.setDataAndType(apkUri, "application/vnd.android.package-archive");
        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
            //Android 8.0   
            //          apk     true-   false-   
            boolean haveInstallPermission = context.getPackageManager().canRequestPackageInstalls();
            Uri packageURI = Uri.parse("package:" + context.getPackageName());
            if (!haveInstallPermission){ 
                //   ,         
                Intent intent2 = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES,packageURI);
                context.startActivity(intent2);
            }else {
                Uri apkUri = FileProvider.getUriForFile(context, "  ..fileProvider", file);
                intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                intent.setDataAndType(apkUri, "application/vnd.android.package-archive");
            }
        }else {
            // 7.0+    
            intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
        }
        context.startActivity(intent);
    }catch (Exception e){

    }

}