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()的代理方法
同時還需在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可以采取這種方法