如何在运行时 android M 中一次在我的代码中授予多个权限



我想一次授予多个权限.....这是我的代码。这只是我想一次授予多个权限的示例。.

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;
    }
}

}

在这里我一一给了权限,所以我在运行时一一获得权限,请建议我一次授予所有权限。.

请在我的代码上建议我在哪里需要更改..

在这里,我的应用程序我有更多的权限需要立即授予,例如相机,位置,存储等...请在我的代码上建议我....

更新并且所有权限都应立即使用"不再询问"检查按钮。

请在我的代码中建议我这种,,,,

在您的请求权限方法中,您可以请求多个使用,而不是一次发送一个权限。

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

其中 Permission1=Manifest.permission.CAMERA权限2= Manifest.permission.READ_PHONE_STATEPermission3=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

您可以创建权限数组并将其直接传递给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;
}

有关处理多个权限的另一种方法,请查看请求运行时权限 - 第 2 部分

最新更新