美文网首页
获取6.0权限管理

获取6.0权限管理

作者: 我想做个程序猿 | 来源:发表于2017-04-19 23:33 被阅读0次

    在Android6.0以后获取一些权限需要用户手动进行授权,否则无法使用.

    这里使用的是闫振杰的库进行授权

    AndroidStudio使用方法,gradle一句话远程依赖

    compile'com.yanzhenjie:permission:1.0.5'

    一个权限

    AndPermission.with(this)    .requestCode(100)    .permission(Manifest.permission.WRITE_CONTACTS)    .send();

    多个权限

    AndPermission.with(this)    .requestCode(100)    .permission(Manifest.permission.WRITE_CONTACTS,Manifest.permission.READ_SMS)   .send();

    在使用到特殊权限时,只需要在Activity、Fragment中直接调用,等到AndPermission回调时即可执行相应的代码。

    注意

    如果你的Activity继承的是AppCompatActivity、FragmentActivity或者它们的子类,那么你直接请求权限就可以。

    如果你的Fragment继承的是android.support.v4.app.Fragment或者它的子类,那么你直接请求权限就可以。

    如果你继承的是android.app.Activity、android.app.Fragment、在6.0以下的手机是没有onRequestPermissionsResult()方法的,所以需要在申请权限前判断:

    //先判断是否有权限。if(AndPermission.hasPermission(this,Manifest.permission.READ_SMS)) {//有权限,直接do anything.}else{//申请权限。AndPermission.with(this)        .requestCode(100)        .permission(Manifest.permission.WRITE_CONTACTS,Manifest.permission.READ_SMS)        .send();}

    利用注解回调只需要重写Activity/Fragment的一个方法,然后提供一个授权时回调的方法即可:

    @OverridepublicvoidonRequestPermissionsResult(intrequestCode,String[] permissions,int[] grantResults) {//只需要调用这一句,第一个参数是当前Acitivity/Fragment,回调方法写在当前Activity/Framgent。AndPermission.onRequestPermissionsResult(this, requestCode, permissions, grantResults);}//成功回调的方法,用注解即可,里面的数字是请求时的requestCode。@PermissionYes(100)privatevoidgetLocationYes(ListgrantedPermissions) {//TODO 申请权限成功。}//失败回调的方法,用注解即可,里面的数字是请求时的requestCode。@PermissionNo(100)privatevoidgetLocationNo(ListdeniedPermissions) {//用户否勾选了不再提示并且拒绝了权限,那么提示用户到设置中授权。if(AndPermission.hasAlwaysDeniedPermission(this, deniedPermissions)) {//第一种:用默认的提示语。AndPermission.defaultSettingDialog(this,REQUEST_CODE_SETTING).show();    }}

    Rationale拒绝一次后,再次提示用户权限作用

    方式一:使用AndPermssion默认MD风格对话框

    AndPermission.with(this)    .requestCode(REQUEST_CODE_PERMISSION_LOCATION)    .permission(Manifest.permission.ACCESS_FINE_LOCATION)    .rationale((requestCode, rationale)->//此对话框可以自定义,调用rationale.resume()就可以继续申请。AndPermission.rationaleDialog(PermissionActivity.this, rationale).show()    )    .send()

    方式二:自定义对话框

    AndPermission.with(this)    .requestCode(REQUEST_CODE_PERMISSION_LOCATION)    .permission(Manifest.permission.ACCESS_FINE_LOCATION)    .rationale(rationaleListener)    .send()/*** Rationale支持,这里自定义对话框。*/privateRationaleListenerrationaleListener=(requestCode, rationale)->{AlertDialog.build(this)        .setTitle("友好提醒")        .setMessage("您已拒绝过定位权限,没有定位权限无法为您推荐附近妹子,请把定位权限赐给我吧!")        .setPositiveButton("好,给你", (dialog, which)->{            rationale.resume();        })        .setNegativeButton("我拒绝", (dialog, which)->{            rationale.cancel();        }).show();};

    相关文章

      网友评论

          本文标题:获取6.0权限管理

          本文链接:https://www.haomeiwen.com/subject/wckkzttx.html