如何在Android 6.0+中同时询问多个权限

编程入门 行业动态 更新时间:2024-10-10 07:23:42
本文介绍了如何在Android 6.0+中同时询问多个权限的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我想让用户同时(一对一)接受以下权限,这些权限类似于: checkLocationPermission,checkReadSMS,checkCallingPermission,checkReadState,checkContactWriteState. 因此,如何在我的第一个屏幕本身中询问所有这些权限. 请在这方面帮助我. 预先感谢.

i want to ask the user to accept the following permissions at the same time(one by one), the permissions are like: checkLocationPermission, checkReadSMS, checkCallingPermission, checkReadState, checkContactWriteState. So, how i can ask all these permissions in my first screen itself. Please help me out in this regard. Thanks in advance.

推荐答案

您必须首先检查用户手机的版本为23.

You have to first check that user phone build version is 23.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { askPermissions(true); } else { startActivity(new Intent(PermissionsActivity.this, SplashActivity.class)); finish(); }

如果版本为23,则需要询问权限.

If version is 23 then you need to ask permissions.

private void askPermissions(boolean isForOpen) { isRationale = false; List permissionsRequired = new ArrayList(); final List<String> permissionsList = new ArrayList<String>(); if (!checkPermission(permissionsList, Manifest.permission.WRITE_EXTERNAL_STORAGE)) permissionsRequired.add("Write External Storage"); if (!checkPermission(permissionsList, Manifest.permission.CALL_PHONE)) permissionsRequired.add("Call phone"); if (!checkPermission(permissionsList, Manifest.permission.READ_PHONE_STATE)) permissionsRequired.add("Read phone state"); if (!checkPermission(permissionsList, Manifest.permission.READ_CONTACTS)) permissionsRequired.add("Read Contacts"); if (!checkPermission(permissionsList, Manifest.permission.RECEIVE_SMS)) permissionsRequired.add("Receive SMS"); if (!checkPermission(permissionsList, Manifest.permission.GET_ACCOUNTS)) permissionsRequired.add("Get Accounts"); if (!checkPermission(permissionsList, Manifest.permission.ACCESS_COARSE_LOCATION)) permissionsRequired.add("Location"); if (!checkPermission(permissionsList, Manifest.permission.ACCESS_FINE_LOCATION)) permissionsRequired.add("Location"); if (permissionsList.size() > 0 && !isRationale) { if (permissionsRequired.size() > 0) { } if (isForOpen) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { ActivityCompat.requestPermissions(this, permissionsList.toArray(new String[permissionsList.size()]), 11); } } } else if (isRationale) { if (isForOpen) { new android.support.v7.app.AlertDialog.Builder(this, R.style.AppCompatAlertDialogStyle) .setTitle("Permission Alert") .setMessage("You need to grant permissions manually. Go to permission and grant all permissions.") .setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); Uri uri = Uri.fromParts("package", getPackageName(), null); intent.setData(uri); startActivityForResult(intent, 123); } }) .show(); } } else { startActivity(new Intent(PermissionsActivity.this, SplashActivity.class)); finish(); } } private boolean checkPermission(List permissionsList, String permission) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) { permissionsList.add(permission); // Check for Rationale Option if (!isFirst) { if (!ActivityCompat.shouldShowRequestPermissionRationale(this, permission)) { isRationale = true; return false; } } } } return true; }

在onRequestPermissionsResult上,您需要检查授予的权限

on the onRequestPermissionsResult you need to check which permissions granted

@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode) { case 11: Map<String, Integer> perms = new HashMap<String, Integer>(); // Initial perms.put(Manifest.permission.WRITE_EXTERNAL_STORAGE, PackageManager.PERMISSION_GRANTED); perms.put(Manifest.permission.CALL_PHONE, PackageManager.PERMISSION_GRANTED); perms.put(Manifest.permission.READ_PHONE_STATE, PackageManager.PERMISSION_GRANTED); perms.put(Manifest.permission.READ_CONTACTS, PackageManager.PERMISSION_GRANTED); perms.put(Manifest.permission.RECEIVE_SMS, PackageManager.PERMISSION_GRANTED); // Fill with results for (int i = 0; i < permissions.length; i++) { perms.put(permissions[i], grantResults[i]); } // Check for ACCESS_FINE_LOCATION if (perms.get(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED && perms.get(Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED && perms.get(Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED && perms.get(Manifest.permission.READ_CONTACTS) == PackageManager.PERMISSION_GRANTED && perms.get(Manifest.permission.RECEIVE_SMS) == PackageManager.PERMISSION_GRANTED) { // All Permissions Granted startActivity(new Intent(PermissionsActivity.this, SplashActivity.class)); finish(); } else { // Permission Denied Toast.makeText(this, "Some Permission is Denied.", Toast.LENGTH_SHORT) .show(); isFirst = false; askPermissions(true); } break; default: super.onRequestPermissionsResult(requestCode, permissions, grantResults); } }

如果用户已将权限设置为不再询问,则将打开应用程序设置屏幕.用户将在那里允许/拒绝许可.您需要再次检查activityResult.

If user has set the permission to never ask again then the application setting screen will open. User will allow/Deny permission there. You need to check again on the activityResult.

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); askPermissions(true); }

更多推荐

如何在Android 6.0+中同时询问多个权限

本文发布于:2023-11-27 11:39:37,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1637908.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:多个   权限   如何在   Android

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!