1. 程式人生 > >Android 8.0 解決不能自動安裝APK問題

Android 8.0 解決不能自動安裝APK問題

Android8.0之前

未知應用安裝許可權預設開啟,如下圖所示

8.0以下手機未知應用安裝許可權.png

Android8.0之後

未知應用安裝許可權預設關閉,且許可權入口隱藏。

如何開啟未知應用安裝許可權的入口,並設定允許安裝?

  1. 在清單檔案中新增許可權
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
  1. 判斷當前是否為8.0以上系統(在這之前也可以對7.0系統進行判斷,這裡程式碼沒有貼出)
 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        boolean hasInstallPermission = isHasInstallPermissionWithO(context);
        if (!hasInstallPermission) {
            startInstallPermissionSettingActivity(context);
                    return;
        }
}
  1. 如果為8.0以上系統,則判斷是否有未知應用安裝許可權
@RequiresApi (api = Build.VERSION_CODES.O)
private boolean isHasInstallPermissionWithO(Context context){
    if (context == null){
        return false;
    }
    return context.getPackageManager().canRequestPackageInstalls();
}
  1. 如果沒有未知應用安裝許可權,則需要手動開啟
/**
 * 開啟設定安裝未知來源應用許可權介面
 * @param context
 */
@RequiresApi (api = Build.VERSION_CODES.O)
private void startInstallPermissionSettingActivity(Context context) {
    if (context == null){
        return;
    }
    Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES);
    ((Activity)context).startActivityForResult(intent,REQUEST_CODE_APP_INSTALL);
}
  1. Activity回撥(這一步根據需求來確定)
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (resultCode== Activity.RESULT_OK ){
            when(requestCode){
                REQUEST_CODE_APP_INSTALL -> {
                    onSettingCheckUpdate()
                }
            }
        }
    }

原文