パーミッションへのAndroid動的アクセスはウィンドウをポップアップできませんmiui ContextCompatは常に0ソリューションを返します

プロジェクトは読み取りと書き込みのストレージ権限を申請する必要がありますが、動的権限は常に利用できるとは限りません。

最初に、許可が取得されたかどうかを判断します。ここでは、PermissionCheckerが使用されています。これは、一部の国内モデルでは、ContextCompatを通じて常に0が返されるためです。

//判断是否有指定权限
public boolean isPermission(Context context, String[] perValue) {//        判断手机版本,如果低于6.0 则不用申请权限,

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {//7.0及以上
        for (int i = 0; i < perValue.length; i++) {

            if ((PermissionChecker.checkSelfPermission(context, perValue[i]) != PackageManager.PERMISSION_GRANTED)) {
                return false;
            }
        }
    }
    return true;
}

権限照会ウィンドウがポップアップされておらず、理由もわからないので、直接権限設定画面にジャンプしてユーザーがクリックできるようにしたいと思いました。

  //检查是否允许允许重新检查
    public void checkPermission(){
        if (isPermission(context, needPermissions)) {//权限全部通过
            beforeLogin();
        } else {
//            showTakePermission(this, context);
            ToastUtil.showToast("请允许'存储'权限!重新启动",R.drawable.ic_error_outline_black_24dp);
            Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            Uri uri = Uri.fromParts("package", getPackageName(), null);
            intent.setData(uri);
            startActivityForResult(intent,1);
        }

onActivityResultで背後にあるロジックを再確認できます

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode==1) {
       //返回逻辑
    }
}

 

個人的な開発のメモ良い解決策と歓迎すべきガイダンスがあります

おすすめ

転載: blog.csdn.net/qq_36355271/article/details/100120503