Android6.0权限适配

作者: 十方天仪君 | 来源:发表于2016-09-28 10:53 被阅读635次

Android API 23之后以下权限需要动态获取:

DangerousPermissions****如下:

Paste_Image.png

先偷一张图,原生的小栗子:

Paste_Image.png

接下来是使用Permissiondispatcher第三方库来实现的方式:

  1. 在项目的build.gradle中(是下图第一个不是第二个)配置:
Paste_Image.png
buildscript {  
  dependencies {
    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
  }
}

2.在module中的build.gradle加上:

apply plugin: 'android-apt'

dependencies {  
  compile 'com.github.hotchemi:permissionsdispatcher:2.2.0'
  apt 'com.github.hotchemi:permissionsdispatcher-processor:2.2.0'
}

注解方法含义:
@RuntimePermissions 标记需要运行时判断的类

@NeedsPermission 标记需要检查权限的方法

@OnShowRationale 授权提示回调

@OnPermissionDenied 授权被拒绝回调

@OnNeverAskAgain 授权不再拒绝不再显示回调

使用方式:

  1. 先在Manifest里添加相应权限:
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />

2.相应的类

@RuntimePermissions
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);

       findViewById(R.id.btn).setOnClickListener(this);

   }

   @Override
   public void onClick(View view) {
       switch (view.getId()) {
           case R.id.btn:
               MainActivityPermissionsDispatcher.getPhoneSignWithCheck(this);
               break;
       }
   }

   /**
    * 运行时候需要的权限
    **/
   @NeedsPermission(Manifest.permission.READ_PHONE_STATE)
   void getPhoneSign() {
       TelephonyManager TelephonyMgr = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
       if (TelephonyMgr != null) {
       String szImei = TelephonyMgr.getDeviceId();   // Requires READ_PHONE_STATE
           Toast.makeText(this, "sign--->" + szImei, Toast.LENGTH_SHORT).show();
       }
   }

   @OnShowRationale(Manifest.permission.READ_PHONE_STATE)
   void showRationale(PermissionRequest request) {
       request.proceed();//提示用户权限使用的对话框

   }

   /**
    * 用户永久拒绝权限使用
    **/
   @OnNeverAskAgain(Manifest.permission.READ_PHONE_STATE)
   void OnNeverAskAgin() {
       Toast.makeText(this, "你永久拒绝了该权限", Toast.LENGTH_SHORT).show();
   }

   /**
    * 用户拒绝该权限执行方法
    **/
   @OnPermissionDenied(Manifest.permission.READ_PHONE_STATE)
   void statePermissionDenied() {
       Toast.makeText(this, "你拒绝了该权限", Toast.LENGTH_SHORT).show();
   }

   /**
    * 权限回调方法,用户点击允许或者拒绝之后都会调用此方法
    * requestCode 定义的权限编码--->请求码
    * permisssions 权限名称
    * grantResults 允许/拒绝
    **/
   @Override
   public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
       super.onRequestPermissionsResult(requestCode, permissions, grantResults);
       MainActivityPermissionsDispatcher.onRequestPermissionsResult(this, requestCode, grantResults);
   }

}

3.首先@RuntimePermissions注解需要进行权限判断的类

4.将需要权限的操作定义在一个方法里,并用 @NeedsPermission(Manifest.permission.READ_PHONE_STATE)表明需要的权限(可以是多个)

5.编译一下,就会生成【当前类名+PermissionsDispatcher】的类,在原本调用的地方调用@NeedsPermission标记的方法,这时候你会发现会对应生成【方法名+WithCheck】的方法

6.如果你需要监听拒绝后的操作,则使用@OnPermissionDenied,使用方法一样。
在我没得工作中可以将此类封装到BaseActivity里,然后子类调用。
放上此类github地址:[1]:https://github.com/hotchemi/PermissionsDispatcher

Paste_Image.png

相关文章

  • 项目适配Android6.0,多个权限一起请求处理

    升级到23以后就需要对Android6.0进行适配,适配的重点就是对权限进行适配,权限分为一般权限和危险权限,项目...

  • 关于android相关知识的整理

    权限 适配Android6.0动态权限管理 FcPermissions:也许是目前最好的动态权限请求库 Andro...

  • Android6.0,7.0适配

    Android6.0适配 从Android 6.0 MarshMallow开始,Android支持动态权限管理,即...

  • Android7.0适配总结

    Android7.0适配注意事项 权限更改 Android6.0引入了动态权限控制(Runtime Permiss...

  • Android权限适配

    一、动态权限的开始 Android系统目前已经更新到8.0(O),自从Android6.0(M)开始,权限适配问题...

  • Unity适配Android6.0权限管理

    1.需求: Unity项目中适配Android6.0权限管理 2.实现原理: 在Unity中使用到相关权限时候调用...

  • Android 6.0权限及以

    这两天着实头疼了一番,因为适配android 6.0的权限,众所周知,android6.0权限需要动态申请,简单说...

  • Android6.0权限适配

    最近关于6.0权限适配的问题,还是有很多,我之前在别的文章中提到过,应该怎样去做适配,但是并没有给出完整代码,只给...

  • Android6.0权限适配

    Android 5.0与6.0权限的不同 5.0以前,只需要manifest.xml中注册声明即可 5.0以后,用...

  • Android6.0权限适配

    源码传送门 前言 现在谈论Android权限适配可能有点没必要,因为网上关于权限适配的文章很多,搜一下Androi...

网友评论

    本文标题:Android6.0权限适配

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