0

一度に複数のアクセス許可を付与したい.....これは私のコードです..これは単なるサンプルです一度に複数のアクセス許可を与えたい..

public class MainActivity extends Activity {

public static final int R_PERM = 123;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.data);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

    if ((CheckPermission(this, Manifest.permission.CAMERA))&&
         (CheckPermission(this, Manifest.permission.READ_PHONE_STATE))&&
         (CheckPermission(this, Manifest.permission.NFC)))
    {
        PermHandling();
    }

    else {
        RequestPermission(MainActivity.this, Manifest.permission.CAMERA, R_PERM);
        RequestPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE, R_PERM );
        RequestPermission(MainActivity.this, Manifest.permission.NFC, R_PERM );

        //NewPermHandling();
    }

}
private void PermHandling() {
    //My app internal parts....
    //Here my stuff works...
}

//private void NewPermHandling(){

//}

@Override
public void onRequestPermissionsResult(int permsRequestCode, String[] permissions, int[] grantResults) {

    switch (permsRequestCode) {

        case R_PERM: {
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                PermHandling();
            } else {
                //Toast.makeText(this, "Please Grant Permissions other wise app will close.!", Toast.LENGTH_SHORT).show();
            }
            return;
        }
    }
}

public void RequestPermission(Activity thisActivity, String Permission, int Code) {
    if (ContextCompat.checkSelfPermission(thisActivity,
            Permission)
            != PackageManager.PERMISSION_GRANTED) {
        if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
                Permission)) {
        } else {
            ActivityCompat.requestPermissions(thisActivity,
                    new String[]{Permission},
                    Code);
        }
    }
}

public boolean CheckPermission(Context context, String Permission) {
    if (ContextCompat.checkSelfPermission(context,
            Permission) == PackageManager.PERMISSION_GRANTED) {
        return true;
    } else {
        return false;
    }
}

}

ここでは、アクセス許可を 1 つずつ与えているので、実行時にアクセス許可を 1 つずつ取得しています。一度にすべてのアクセス許可を与えることを提案してください。

コードのどこを変更する必要があるか教えてください..

ここで私のアプリには、カメラ、場所、ストレージなど、一度に付与する必要がある権限がさらにあります... Mycodeで提案してください....

更新とすべてのアクセス許可は、[二度と確認しない] チェック ボタンを使用 して一度に行う必要があります....

私のコードでこの種のことを提案してください、、、、

4

2 に答える 2

-1

Request Permision メソッド内で、一度に 1 つのアクセス許可を送信する代わりに、複数の使用を要求できます。

     ActivityCompat.requestPermissions(thisActivity,
                new String[]{Permission1,Permission2,Permission3},
                Code);

Permission1=Manifest.permission.CAMERA Permission2= Manifest.permission.READ_PHONE_STATE Permission3=Manifest.permission.NFC

これが行うことは、Android がダイアログ ボックスで次々とパーミッションを要求するようにすることです。また、int[] grantResults を実行することで、onRequestPermissionsResult で一度にどの権限が付与されているかを確認できます。

int[] grantResults は、要求された権限の順序で権限付与結果を返すことに注意してください。私たちの場合 - Manifest.permission.CAMERA、Manifest.permission.READ_PHONE_STATE、Manifest.permission.NFC

以下のリンクで詳しく説明されていますので、そちらをご覧ください。

https://developer.android.com/training/permissions/requesting.html

于 2016-05-27T05:51:33.983 に答える
-1

許可配列を作成して、直接 に渡すことができますrequestPermissions()

String[] PERMISSIONS = new String[]{Manifest.permission.READ_CONTACTS, Manifest.permission.RECORD_AUDIO};

そしてそれをに渡しますrequestPermissions()

requestPermissions(PERMISSIONS, 10);

すべての許可を得ているかどうかを確認しますonRequestPermissionsResult

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {

    switch (requestCode) {
        case 10:
            if (hasAllPermissionsGranted(grantResults)) {
                // Permission Granted

            } else {
                // Permission Denied

            }
            break;
        default:
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }
}

ここにhasAllPermissionsGranted方法があります

public boolean hasAllPermissionsGranted(@NonNull int[] grantResults) {
    for (int grantResult : grantResults) {
        if (grantResult == PackageManager.PERMISSION_DENIED) {
            return false;
        }
    }
    return true;
}

複数のパーミッションを処理する別のアプローチについては、Runtime Permission のリクエスト – パート 2を確認してください。

于 2016-05-27T05:52:55.253 に答える