Android8.0手機安裝apk報錯解決辦法

android8.0手機在進行版本更新之后安裝apk閃退,這是因為android8.0需要開發(fā)人員處理未知應用來源權(quán)限問題。
解決辦法:
1、在AndroidManifest中新增權(quán)限:

<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"></uses-permission>

2、我使用的PermissionsDispatcher

/**
     * 判斷是否是8.0,8.0需要處理未知應用來源權(quán)限問題,否則直接安裝
     */
    private void checkIsAndroidO(File file) {
        if (Build.VERSION.SDK_INT >= 26) {
            boolean canRequestPackageInstalls = getPackageManager().canRequestPackageInstalls();
            if (canRequestPackageInstalls ) {
                openAPK(file);
            } else {
                //請求安裝未知應用來源的權(quán)限
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.REQUEST_INSTALL_PACKAGES}, 10010);
            }
        } else {
            openAPK(file);
        }

    }
/**
     * 打開apk
     */
    private void openAPK(File file) {
        try {
            if(Build.VERSION.SDK_INT>=24) {//判讀版本是否在7.0以上
                String authority = getApplicationContext().getPackageName() + ".fileProvider";
                Uri apkUri = FileProvider.getUriForFile(SplashActivity.this,authority, file);//在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);//添加這一句表示對目標應用臨時授權(quán)該Uri所代表的文件
                install.setDataAndType(apkUri, "application/vnd.android.package-archive");
                startActivity(install);
            } else{
                Intent install = new Intent(Intent.ACTION_VIEW);
                install.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
                install.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(install);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
@Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode) {
            case 10010:
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    String root = Environment.getExternalStorageDirectory().getPath();
                    File file = new File(root, "你的apk.apk");
                    openAPK(file);
                } else {
                    new AlertDialog.Builder(this)
                            .setTitle("溫馨提示")
                            .setMessage("請設(shè)置允許安裝耀分期apk")
                            .setPositiveButton("去設(shè)置", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                    Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES);
                                    startActivityForResult(intent, 10012);
                                }
                            })
                            .show();
                }
                break;
            case 別的:
               
                break;

            default:
                break;
        }
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        SplashActivityPermissionsDispatcher.onRequestPermissionsResult(this, requestCode, grantResults);
    }
@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {
            case 10012:
                String root = Environment.getExternalStorageDirectory().getPath();
                File file = new File(root, "yaofenqi.apk");
                checkIsAndroidO(file);
                break;

            default:
                break;
        }
    }

Android7.0應用數(shù)據(jù)共享權(quán)限,F(xiàn)ileProvider不會寫的可以參考該博客[# Android 7.0 行為變更 通過FileProvider在應用間共享文件吧

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容