10k star的动态权限申请框架

优势:全面支持Kotlin和Java

   使用注解

   100%无反射

      支持特殊权限,例如WRITE_SETTINGS,SYSTEM_ALERT_WINDOW等

用法:

可以使用ktx或者kapt或者Java

以下以kapt为例子,添加依赖

 //permission
    def permission_version = "4.7.0"
    implementation "org.permissionsdispatcher:permissionsdispatcher:${permission_version}"
    kapt "org.permissionsdispatcher:permissionsdispatcher-processor:${permission_version}"

在你要申请的类里进行操作:

首先这个类用到了动态权限就需要添加RuntimePermissions注解


@RuntimePermissions
class MainActivity : AppCompatActivity() {}

申請的权限还是需要在Manifest文件注册

Add the following line to AndroidManifest.xml:

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

在需要使用相机的方法添加@NeedPermission注解,如下:


@NeedsPermission(Manifest.permission.CAMERA)
fun initFaceCamera() {

}
 

拒绝权限的提示

    @OnPermissionDenied(Manifest.permission.CAMERA)
    void showDenied() {
        Toast.makeText(MainActivity.this, "无法获得权限", Toast.LENGTH_SHORT).show();
    }

这里还没结束,还要生成委托MainActivityPermissionsDispatcher,可以Make Project一下,生成文件的路径为

\app\build\generated\source\kapt\debug\对应类路径

在OnCreate或者合适的地方调用

 initFaceCameraWithPermissionCheck()  

此方法就是在MainActivityPermissionsDispatcher中的,由框架生成的@NeedsPermission注解的initFaceCamera()的代理方法

permissionsdispatcher的用法(用起来并没有多好用)

 

 同时还需在OnRequesetPermissionsResult里调用上面图中的onRequestPermissionsResult方法

    override fun onRequestPermissionsResult(
        requestCode: Int,
        permissions: Array<out String>,
        grantResults: IntArray
    ) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        onRequestPermissionsResult(requestCode, grantResults)
     }

至此才能正确处理相机动态权限,如果是Java应该需要用类名.方法名调用

相比Rxpermissions没有更简单,相比EasyPermissions也没有更清楚,如果你使用kotlinx或者kapt可以采取这种方法

相关文章:

  • 2022-03-14
  • 2021-06-27
  • 2021-06-14
  • 2021-08-06
  • 2021-11-23
  • 2021-09-22
  • 2021-07-02
  • 2022-12-23
猜你喜欢
  • 2022-01-09
  • 2022-12-23
  • 2021-09-27
  • 2021-05-31
  • 2021-10-23
  • 2021-09-11
  • 2021-07-11
相关资源
相似解决方案