我想用
android.permission.CAMERA
android.permission.WRITE_EXTERNAL_STORAGE
在单个请求中使用
ActivityCompat.requestPermissions(Activity activity,new String permisionList[],int permissionRequestcode);
但我的问题是,我只是请求一个权限,我读了关于组权限,但它只适用于由开发人员,喜欢CONTACT_GROUP : read_contact,write_contact
等决定的相同组.
我想创建自定义组权限,只向我询问一个请求并仅向我提供一个响应.
谢谢
您可以在单个请求中询问多个权限(来自不同的组).为此,您需要将所有权限添加到您提供的字符串数组作为requestPermissions API的第一个参数,如下所示:
requestPermissions(new String[]{ Manifest.permission.READ_CONTACTS, Manifest.permission.ACCESS_FINE_LOCATION}, ASK_MULTIPLE_PERMISSION_REQUEST_CODE);
执行此操作时,您将看到权限弹出窗口是多个权限弹出窗口的堆栈.当然,您需要处理每个权限的接受和拒绝(包括"永不再问")选项.同样经过精心解释了这里.
首先初始化权限请求代码
public static final int PERMISSIONS_MULTIPLE_REQUEST = 123;
检查android版本
private void checkAndroidVersion() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { checkPermission(); } else { // write your logic here } }
检查多个权限代码
private void checkPermission() { if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE) + ContextCompat .checkSelfPermission(getActivity(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { if (ActivityCompat.shouldShowRequestPermissionRationale (getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE) || ActivityCompat.shouldShowRequestPermissionRationale (getActivity(), Manifest.permission.CAMERA)) { Snackbar.make(getActivity().findViewById(android.R.id.content), "Please Grant Permissions to upload profile photo", Snackbar.LENGTH_INDEFINITE).setAction("ENABLE", new View.OnClickListener() { @Override public void onClick(View v) { requestPermissions( new String[]{Manifest.permission .READ_EXTERNAL_STORAGE, Manifest.permission.CAMERA}, PERMISSIONS_MULTIPLE_REQUEST); } }).show(); } else { requestPermissions( new String[]{Manifest.permission .READ_EXTERNAL_STORAGE, Manifest.permission.CAMERA}, PERMISSIONS_MULTIPLE_REQUEST); } } else { // write your logic code if permission already granted } }
用户授予权限后回调方法
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode) { case PERMISSIONS_MULTIPLE_REQUEST: if (grantResults.length > 0) { boolean cameraPermission = grantResults[1] == PackageManager.PERMISSION_GRANTED; boolean readExternalFile = grantResults[0] == PackageManager.PERMISSION_GRANTED; if(cameraPermission && readExternalFile) { // write your logic here } else { Snackbar.make(getActivity().findViewById(android.R.id.content), "Please Grant Permissions to upload profile photo", Snackbar.LENGTH_INDEFINITE).setAction("ENABLE", new View.OnClickListener() { @Override public void onClick(View v) { requestPermissions( new String[]{Manifest.permission .READ_EXTERNAL_STORAGE, Manifest.permission.CAMERA}, PERMISSIONS_MULTIPLE_REQUEST); } }).show(); } } break; } }
在这个阶段没有黑客可以规避来自不同组的权限.这就是android如何开发运行时权限的本质,让用户可以选择接受哪些权限.当然不接受应用程序所需的所有权限,可能会使应用程序无法正常工作.
CAMERA和WRITE_EXTERNAL_STORAGE都被视为危险权限,并且在单独的组中,因此都需要运行时权限请求.
一旦为特定组授予了权限,就不需要在应用程序运行的生命周期内再次请求它,或者如果作为默认设置提供它,则不再需要它.
你唯一能做的就是要求用户接受默认的决定,可以通过使用"再也不要问"来撤销这些决定.
我遇到了同样的问题,偶然发现了这个库.
基本上,您可以按顺序请求多个权限,此外,如果用户拒绝您的许可,您可以添加侦听器以弹出快餐栏.