Android动态申请权限 淡淡的烟草味﹌ 2022-12-23 06:43 155阅读 0赞 ### 1、首先在AndroidManifest.xml静态申请权限: ### <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> ### 2、检查权限是否申请: ### /** * 检查单个权限是否申请 * * @param permissionName 权限名(例:Manifest.permission.WRITE_EXTERNAL_STORAGE) * @return 申请结果 */ protected boolean checkPhonePermission(String permissionName) { if (Build.VERSION.SDK_INT >= 23) { return ContextCompat.checkSelfPermission(this, permissionName) == PackageManager.PERMISSION_GRANTED; } return true; } ### 3、申请权限: ### /** * 申请权限 * * @param permissionName 权限名 */ public void requestPermissions(String permissionName) { //注册权限 ActivityCompat.requestPermissions(this, new String[]{permissionName}, 1); } ### 4、判断权限申请结果:(在权限申请对话框消失后执行,在Activity中重写,可用于监听权限申请结果) ### @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(); } } } } ### 5、需要用户手动赋予的权限: ### <table> <thead> <tr> <th>所属权限组</th> <th>权限</th> </tr> </thead> <tbody> <tr> <td>日历</td> <td>READ_CALENDAR</td> </tr> <tr> <td>日历</td> <td>WRITE_CALENDAR</td> </tr> <tr> <td>相机</td> <td>CAMERA</td> </tr> <tr> <td>联系人</td> <td>READ_CONTACTS</td> </tr> <tr> <td>联系人</td> <td>WRITE_CONTACTS</td> </tr> <tr> <td>联系人</td> <td>GET_ACCOUNTS</td> </tr> <tr> <td>位置</td> <td>ACCESS_FINE_LOCATION</td> </tr> <tr> <td>位置</td> <td>ACCESS_COARSE_LOCATION</td> </tr> <tr> <td>麦克风</td> <td>RECORD_AUDIO</td> </tr> <tr> <td>电话</td> <td>READ_PHONE_STATE</td> </tr> <tr> <td>电话</td> <td>CALL_PHONE</td> </tr> <tr> <td>电话</td> <td>READ_CALL_LOG</td> </tr> <tr> <td>电话</td> <td>WRITE_CALL_LOG</td> </tr> <tr> <td>电话</td> <td>ADD_VOICEMAIL</td> </tr> <tr> <td>电话</td> <td>USE_SIP</td> </tr> <tr> <td>电话</td> <td>PROCESS_OUTGOING_CALLS</td> </tr> <tr> <td>传感器</td> <td>BODY_SENSORS</td> </tr> <tr> <td>短信</td> <td>SEND_SMS</td> </tr> <tr> <td>短信</td> <td>RECEIVE_SMS</td> </tr> <tr> <td>短信</td> <td>READ_SMS</td> </tr> <tr> <td>短信</td> <td>RECEIVE_WAP_PUSH</td> </tr> <tr> <td>短信</td> <td>RECEIVE_MMS</td> </tr> <tr> <td>存储</td> <td>READ_EXTERNAL_STORAGE</td> </tr> <tr> <td>存储</td> <td>WRITE_EXTERNAL_STORAGE</td> </tr> </tbody> </table> ### 6、注意 ### * 如果某权限申请失败,查看是不是权限遍历后一个一个申请的,如果是这样的改为如下一次性申请: int REQUEST_CODE_CONTACT = 101; //申请权限 String[] permissions = {Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}; //验证是否申请权限 if (getApplicationContext().checkSelfPermission(permissions[1]) != PackageManager.PERMISSION_GRANTED) { //申请权限 ActivityCompat.requestPermissions(MainActivity.this, permissions, REQUEST_CODE_CONTACT); } * 如果Android版本为10,SDK29以上则在AndroidManifest.xml中的application标签中添加如下配置: android:requestLegacyExternalStorage="true" ## ##
还没有评论,来说两句吧...