Android 权限申请最佳适配方案——permissions4m

前言

permissions4m最初的设计是仅仅做成一个编译器注解框架,在1.0.0版本时,它纯粹地实现了原生 Android 请求流程,但是当投入笔者自己项目中使用的时候,笔者发现国产手机又许多适配缺陷,例如:

  • ActivityCompat.shouldShowRequestPermissionRationale(Activity,String)
  • 明明用户点击拒绝授权,却回调的是权限申请成功方法
  • 只能有一次权限是否授予选择,拒绝后就无法再有提示

permissions4m 简介

简介中只是节选了部分内容,更详细完整的请移至项目:https://github.com/jokermonn/permissions4m

引入依赖

Gradle 依赖

project 中的 build.gradle

buildscript {
  // ...
}

allprojects {
  repositories {
    // 请添加如下一行
    maven { url 'https://jitpack.io' }
  }
}

app 中的 build.gradle:

dependencies {
  compile 'com.github.jokermonn:permissions4m:2.0.0-lib'
  annotationProcessor 'com.github.jokermonn:permissions4m:2.0.0-processor'
}

注解回调

在需要权限申请的地方调用

Permissions4M.get(MainActivity.this)
            // 是否强制弹出权限申请对话框,建议为 true
            .requestForce(true)
            // 权限
            .requestPermission(Manifest.permission.RECORD_AUDIO)
            // 权限码
            .requestCode(AUDIO_CODE)
            // 如果需要使用 @PermissionNonRationale 注解的话,建议添加如下一行
            // 返回的 intent 是跳转至**系统设置页面**
            // .requestPageType(Permissions4M.PageType.MANAGER_PAGE)
            // 返回的 intent 是跳转至**手机管家页面**
            // .requestPageType(Permissions4M.PageType.ANDROID_SETTING_PAGE)
            .request();

如:

button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Permissions4M.get(MainActivity.this)
                .requestForce(true)
                .requestPageType(Permissions4M.PageType.MANAGER_PAGE)
                .requestPermission(Manifest.permission.RECORD_AUDIO)
                .requestCode(AUDIO_CODE)
                .request();
    }
});

然后将会回调相应的

@PermissionsGranted @PermissionsDenied @PermissionsRationale/@PermissionsCustomRationale@PermissionsNonRationale 所修饰的方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值