6.0权限管理

1.首先,6.0的权限管理包括:

关于日历的权限:

<uses-permission android:name="android.permission.READ_CALENDAR"/>
<uses-permission android:name="android.permission.WRITE_CALENDAR"/>

关于相机的权限:

<uses-permission android:name="android.permission.CAMERA"/>

关于联系人的权限:

<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
<uses-permission android:name="android.permission.GET_CONTACTS"/>

关于位置的权限:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

关于电话的权限:

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.READ_CALL_LOG"/>
<uses-permission android:name="android.permission.WRITE_CALL_LOG"/>
<uses-permission android:name="android.permission.USE_SIP"/>
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>

关于传感器的权限:

<uses-permission android:name="android.permission.BODY_SENSORS"/>

关于短信的权限:

<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_WAP_PUSH"/>
<uses-permission android:name="android.permission.RECEIVE_MMS"/>
<uses-permission android:name="android.permission.READ_CELL_BROADCASTS"/>

关于SD卡的权限

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

上面这些摘自:https://juejin.im/post/5af815b3f265da0b93486566

2.需要在每回使用这些危险,权限前判断系统版本和是否已经授权成功:

Build.VERSION.SDK_INT >= Build.VERSION_CODES.N
 if (ContextCompat.checkSelfPermission(this,
                    Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {}

这里的Mainfest.permission.后面跟的是具体权限:

3.需要在

Packmanager.DENIED时候申请一下权限:
 ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                        REQUEST_FOR_PERMISSION_GRANTED);

这个方法的第3个参数是回调的参数,随意设置。

4.需要在Activity的方法OnRequestPermissionResult(int request,String[] permission,int[] grantResults)中判断是否授权成功;

这个方法有3个参数回调:

第一个参数是你刚才传过去的回调参数;第二个是申请授权的权限;第三个是授权结果,封装着Packmanager.permission_GRAN和DENIED成功还是失败,这时候需要判断下是成功还是失败:


for (int grantResult : grantResults) {
            if (grantResult != PackageManager.PERMISSION_GRANTED) {
                return false;//用户未授权
            }
        }

成功按流程继续调用就可以了,失败就是弹个Tomast提示下"用户授权失败",但是,失败有2中情况.

5.在失败时候有2种情况1.是用户选择拒接,2.用户拒绝并且选择不再申请,需要一个api来判断了:

ActivityCompat.shouldshowRequestPermissionRationale(activity,permission);当返回false时候,需要提示用户去设置里面去勾选了,

Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                                     Uri uri = Uri.fromParts("package", getPackageName(), null);
                                     intent.setData(uri);
                                     startActivityForResult(intent, GOTO_SETTINGS_CAMERA);

在onActivityResult里面做判断,是否用户申请成功.


最后贴上一些第三发的申请框架:

AndPermission:https://github.com/yanzhenjie/AndPermission

PermissionDispatCher(一款根据注解的权限管理框架):https://github.com/permissions-dispatcher/PermissionsDispatcher



阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页