Loading... !!! <h1>0x00 权限组</h1> <table> <thead> <tr> <th align="left">所属权限组</th> <th align="left">权限</th> </tr> </thead> <tbody> <tr> <td align="left">日历</td> <td align="left">READ_CALENDAR</td> </tr> <tr> <td align="left">日历</td> <td align="left">WRITE_CALENDAR</td> </tr> <tr> <td align="left">相机</td> <td align="left">CAMERA</td> </tr> <tr> <td align="left">联系人</td> <td align="left">READ_CONTACTS</td> </tr> <tr> <td align="left">联系人</td> <td align="left">WRITE_CONTACTS</td> </tr> <tr> <td align="left">联系人</td> <td align="left">GET_ACCOUNTS</td> </tr> <tr> <td align="left">位置</td> <td align="left">ACCESS_FINE_LOCATION</td> </tr> <tr> <td align="left">位置</td> <td align="left">ACCESS_COARSE_LOCATION</td> </tr> <tr> <td align="left">麦克风</td> <td align="left">RECORD_AUDIO</td> </tr> <tr> <td align="left">电话</td> <td align="left">READ_PHONE_STATE</td> </tr> <tr> <td align="left">电话</td> <td align="left">CALL_PHONE</td> </tr> <tr> <td align="left">电话</td> <td align="left">READ_CALL_LOG</td> </tr> <tr> <td align="left">电话</td> <td align="left">WRITE_CALL_LOG</td> </tr> <tr> <td align="left">电话</td> <td align="left">ADD_VOICEMAIL</td> </tr> <tr> <td align="left">电话</td> <td align="left">USE_SIP</td> </tr> <tr> <td align="left">电话</td> <td align="left">PROCESS_OUTGOING_CALLS</td> </tr> <tr> <td align="left">传感器</td> <td align="left">BODY_SENSORS</td> </tr> <tr> <td align="left">短信</td> <td align="left">SEND_SMS</td> </tr> <tr> <td align="left">短信</td> <td align="left">RECEIVE_SMS</td> </tr> <tr> <td align="left">短信</td> <td align="left">READ_SMS</td> </tr> <tr> <td align="left">短信</td> <td align="left">RECEIVE_WAP_PUSH</td> </tr> <tr> <td align="left">短信</td> <td align="left">RECEIVE_MMS</td> </tr> <tr> <td align="left">存储</td> <td align="left">READ_EXTERNAL_STORAGE</td> </tr> <tr> <td align="left">存储</td> <td align="left">WRITE_EXTERNAL_STORAGE</td> </tr> </tbody> </table> 来自谷歌API,<a href="https://developer.android.com/guide/topics/permissions/requesting.html#normal-dangerous" target="_blank" rel="noopener">点击此处跳转</a> <strong>注意:如果应用程序请求在AndroidManifest中列出的危险权限,并且应用程序已经在同一权限组中具有另一个危险权限,系统会立即授予权限,而不会与用户进行任何交互,。例如,如果一个应用程序先前已经请求并被授予READ_CONTACTS权限,然后它请求WRITE_CONTACTS(同属于联系人一组),系统会立即授予该权限,不会再弹出权限授予询问的对话框。</strong> <h1>0x01 动态申请权限方法</h1> <pre>public void requestPower() { //判断是否已经赋予权限 if (ContextCompat.checkSelfPermission(this, Manifest.permission.上表权限字符) != PackageManager.PERMISSION_GRANTED) { //如果应用之前请求过此权限但用户拒绝了请求,此方法将返回 true。 if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.上表权限字符)) {//这里可以写个对话框之类的项向用户解释为什么要申请权限,并在对话框的确认键后续再次申请权限 } else { //申请权限,字符串数组内是一个或多个要申请的权限,1是申请权限结果的返回参数,在onRequestPermissionsResult可以得知申请结果 ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.上表权限字符,}, 1); } } } </pre> 注意,因为判断语句,其实实际上当用户拒绝一次权限申请后,再次调用方法,不会再出现申请权限对话框。而如果不把权限写在数组里,而是每条权限放在一个多个以下方法里一起调用,实际上,每次一起调用这多个方法,实际只申请这些方法的一条权限。 <h1>0x02 判断权限申请结果</h1> 判断权限申请结果的方法(在权限申请对话框消失后执行) <pre>@Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == 1) { for (int i = 0; i < permissions.length; i++) { if (grantResults[i] == PERMISSION_GRANTED) { Toast.makeText(this, "" + "权限" + permissions[i] + "申请成功", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(this, "" + "权限" + permissions[i] + "申请失败", Toast.LENGTH_SHORT).show(); } } } } </pre> 当系统要求用户授予权限时,用户可以选择指示系统不再要求提供该权限。这种情况下,无论应用在什么时候使用 requestPermissions() 再次要求该权限,系统都会立即拒绝此请求。 !!! Last modification:October 24, 2019 © Allow specification reprint Support Appreciate the author AliPayWeChat Like 0 如果觉得我的文章对你有用,请随意赞赏
One comment
你的文章让我感受到了正能量,非常棒!http://www.bcylc847.com