1. 程式人生 > >Android8.0 允許安裝未知來源許可權(一)

Android8.0 允許安裝未知來源許可權(一)

這裡寫圖片描述
一. 簡介
在Android8.0之前的系統中,使用者要從除官方應用商店之外的來源安裝App時,需要開啟系統設定當中的”允許未知來源”安裝應用程式的選項,在最新的Android O當中谷歌已經刪除了該永久授權的選項,從系統設定當中已經找不到該開關。谷歌將永久授權修改為每次的單獨授權,當用戶每次安裝第三方來源的android軟體時需要對軟體許可權進行手動確認。
二. 影響
當你的應用適配到8.0後,除了從Google play外的其他渠道安裝應用都會被阻塞,如果不處理好安裝未知來源的適配許可權。可能會導致應用無法升級,只能解除安裝後重新下載新版本。
三. 適配步驟
步驟一.在AndroidManifest.xml中增加請求安裝的許可權

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

步驟二.在安裝apk之前進行判斷是否已經打開了該許可權
使用到新增加的API canRequestPackageInstalls() 判斷是否已經開啟許可權,如果沒有開啟許可權就引導使用者去手動開啟,因為這個許可權不是執行時許可權,不能在程式碼中請求開啟。如果使用者已經打開了該許可權,那麼就直接安裝apk

boolean haveInstallPermission = mContext.getPackageManager().canRequestPackageInstalls();
 if
(!haveInstallPermission){ //許可權沒有開啟則提示使用者去手動開啟 }

步驟三.跳轉到開啟許可權介面

Uri packageURI = Uri.parse("package:"+mContext.getPackageName());
Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES,packageURI);
startActivityForResult(intent, INSTALL_PERMISS_CODE);

步驟四 .在許可權成功開啟返回後,在onActivityResult中做處理,安裝apk

if (resultCode == RESULT_OK && requestCode == INSTALL_PERMISS_CODE) {
            installApk();
 }

四. 程式碼示例

/**
     * 8.0以上系統設定安裝未知來源許可權
     */
    public void setInstallPermission(){
        boolean haveInstallPermission;
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
            //先判斷是否有安裝未知來源應用的許可權
            haveInstallPermission = getPackageManager().canRequestPackageInstalls();
            if(!haveInstallPermission){
                //彈框提示使用者手動開啟
                MessageDialog.showAlert(this, "安裝許可權", "需要開啟允許來自此來源,請去設定中開啟此許可權", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                            //此方法需要API>=26才能使用
                            toInstallPermissionSettingIntent();
                        }
                    }
                });
                return;
            }
        }
    }


    /**
     * 開啟安裝未知來源許可權
     */
    @RequiresApi(api = Build.VERSION_CODES.O)
    private void toInstallPermissionSettingIntent() {
        Uri packageURI = Uri.parse("package:"+getPackageName());
        Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES,packageURI);
        startActivityForResult(intent, INSTALL_PERMISS_CODE);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (resultCode == RESULT_OK && requestCode == INSTALL_PERMISS_CODE) {
            Toast.makeText(this,"安裝應用",Toast.LENGTH_SHORT).show();
        }
    }
/**
     * alert 訊息提示框顯示
     * @param context   上下文
     * @param title     標題
     * @param message   訊息
     * @param listener  監聽器
     */
    public static void showAlert(Context context, String title, String message, OnClickListener listener){
        Builder builder = new Builder(context);
        builder.setTitle(title);
        builder.setMessage(message);
        builder.setPositiveButton("確定", listener);
        builder.setCancelable(false);
        builder.setIcon(R.mipmap.ic_launcher);
        AlertDialog dialog = builder.create();
        dialog.show();
    }

五.Gif展示
這裡寫圖片描述

六.總結
本文主要介紹了android8 為什麼要適配允許安裝未知來源許可權,以及怎麼去適配,希望大家都能少走點坑,能更簡單的開發,愉快的生活。