66

を使いたい

  1. android.permission.CAMERA
  2. android.permission.WRITE_EXTERNAL_STORAGE

を使用した単一のリクエストで

ActivityCompat.requestPermissions(Activity activity,new String permisionList[],int permissionRequestcode);

しかし、私の問題は、1つの許可のみを要求するときに、グループ許可について読みましたが、開発者が決定した同じグループ、いいねCONTACT_GROUP : read_contact,write_contactなどでのみ機能することです.

1 つのリクエストのみを要求し、1 つの応答のみを提供するカスタム グループ権限を作成したいと考えています。

ありがとう

4

16 に答える 16

6

この段階では、さまざまなグループに一緒に許可を求めることを回避するためのハックはありません。これは、Android が実行時パーミッションを開発した方法の性質であり、ユーザーが受け入れるパーミッションを選択できるようにします。もちろん、アプリに必要なすべての権限を許可しないと、アプリが正常に動作しなくなる可能性があります。

CAMERA と WRITE_EXTERNAL_STORAGE はどちらも危険な権限と見なされ、別のグループに属しているため、両方とも実行時の権限リクエストが必要です。

特定のグループにアクセス許可が付与されると、アプリの実行中、または既定の設定で許可されている場合は取り消されるまで、再度要求する必要はありません。

ここに画像の説明を入力

ここに画像の説明を入力

あなたができる唯一のことは、 「二度と質問しない」を使用して、取り消すことができるデフォルトとして決定を受け入れるようにユーザーに依頼することです

ここに画像の説明を入力

于 2016-01-02T15:13:22.983 に答える
5

私は同じ問題を抱えていて、このライブラリに出くわしました。

基本的に、複数の許可を順番に要求できます。さらに、ユーザーが許可を拒否した場合に、リスナーを追加してスナックバーをポップアップすることができます。

dexter_sample

于 2016-10-30T18:58:22.537 に答える
2

私は同じ問題に直面しましたが、以下は私が思いついた回避策です:

public boolean checkForPermission(final String[] permissions, final int permRequestCode, int msgResourceId) {
        final List<String> permissionsNeeded = new ArrayList<>();
        for (int i = 0; i < permissions.length; i++) {
            final String perm = permissions[i];
            if (ContextCompat.checkSelfPermission(getActivity(), permissions[i]) != PackageManager.PERMISSION_GRANTED) {
                if (shouldShowRequestPermissionRationale(permissions[i])) {
                    final AlertDialog dialog = AlertDialog.newInstance( getResources().getString(R.string.permission_title), getResources().getString(msgResourceId) );
                    dialog.setPositiveButton("OK", new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            // add the request.
                            permissionsNeeded.add(perm);
                            dialog.dismiss();
                        }
                    });
                    dialog.show( getActivity().getSupportFragmentManager(), "HCFAlertDialog" );
                } else {
                    // add the request.
                    permissionsNeeded.add(perm);
                }
            }
        }

        if (permissionsNeeded.size() > 0) {
            // go ahead and request permissions
            requestPermissions(permissionsNeeded.toArray(new String[permissionsNeeded.size()]), permRequestCode);
            return false;
        } else {
            // no permission need to be asked so all good...we have them all.
            return true;
        }
    }

そして、上記のメソッドを次のように呼び出します。

if ( checkForPermission( new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, 
Manifest.permission.CAMERA}, REQUEST_PERMISSION_EXTERNAL_STORAGE_RESULT, R.string.permission_image) ) {
                        // DO YOUR STUFF

                    }
于 2016-07-28T16:11:36.747 に答える
1

許可されていない場合は、複数の許可と要求を確認してください

 public void checkPermissions(){
    if(ContextCompat.checkSelfPermission(getApplicationContext(),
            Manifest.permission.WRITE_EXTERNAL_STORAGE)== PackageManager.PERMISSION_GRANTED && ContextCompat.checkSelfPermission(getApplicationContext(),Manifest.permission.CAMERA)==PackageManager.PERMISSION_GRANTED){
        //Do_SOme_Operation();
    }else{
        requestStoragePermission();
    }
}

public void requestStoragePermission(){
    ActivityCompat.requestPermissions(this
            ,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.CAMERA},1234);
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    switch (requestCode){
        case 1234:if(grantResults[0]==PackageManager.PERMISSION_GRANTED && grantResults[1]==PackageManager.PERMISSION_GRANTED){
  // Do_SOme_Operation();
        }

        default:super.onRequestPermissionsResult(requestCode,permissions,grantResults);
    }
}
于 2018-10-19T18:08:50.820 に答える