KO
|
EN
gitlite — search
Search
#javascript
#python
#hacktoberfest
#react
#ai
#typescript
#llm
#go
#golang
#android
#machine-learning
#rust
#deep-learning
#linux
SimplePermission
★ 9
Open GitHub ↗
一行注解完成权限操作
Download README (.md)
Explore Similar Repositories
faa-aircraft-registry
:
Format FAA aircraft registry database into Python dictionaries for programmatic use.
jpcap-mitm
:
A LAN-based point-to-point attack network sniffer implemented using jpcap, with packet statistics and clustering visualization frontend module.
test-kitchen
:
Repository for the actionshub-test-kitchen Github Action
delegatr
:
Delegatr
pyramid-cnn-leaves-segmentation
:
PyTorch implementation of the Pyramid CNN network from "A Pyramid CNN for Dense-Leaves Segmentation"
// repository documentation
Was this content helpful?
★ 0
(0 ratings)
Select Rating:
★
★
★
★
★
Submit Feedback
Recent Feedback
×
Download README
Do you want to download the
README.md
file for
SimplePermission
?
Download (.md)
# SimplePermission 一行注解搞定Android6.0运行时权限。 ## 一、项目介绍 这是一款基于AOP思想的运行时权限库。帮助开发者免去繁琐的权限请求流程,一行注解就可以完成权限请求,大大降低了权限请求对业务代码对入侵。 ## 二、功能与优势 - 支持单权限/多权限请求 - 一行注解申请/处理权限 - 支持私有化的调用方法 - 支持权限拒绝/不再询问的自定义处理 - 支持Activity、Fragment、Dialog、PopupWindow或者其他View中使用 - 支持kotlin、androidx - 非侵入式 ## 三、权限申请流程  ## 四、添加依赖和配置 1.在project的`build.gradle`中添加 ``` buildscript { dependencies { ... classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.10' } allprojects { repositories { ... maven { url 'https://jitpack.io' } } } } ``` 2.在app/libary的`build.gradle`中添加 ``` apply plugin: 'android-aspectjx' dependencies { implementation 'com.github.bit-cores:SimplePermission:0.1.0' } ``` 注意:如果是多Module多工程,需要在每个用到运行时权限的Module中都添加`apply plugin: 'android-aspectjx'` ## 五、使用 **Basic** ``` @CheckPermission( value = [Manifest.permission.CAMERA], requestCode = REQUEST_CODE_CAMERA, describe = permissionDescribe ) fun openCamera() { //打开相机 var intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.addCategory("android.intent.category.DEFAULT") startActivityForResult(intent, 1) } ``` 这种方式及其简单,只需要申明权限/权限组、requestCode、请求拒绝的描述就可以了。如果用户同意权限,就直接执行方法; 如果用户拒绝,会用框架默认的Dialog去提示权限作用或者引导用户手动授权。 参数: <br>`value:`权限数组,如果是多个权限用,隔开。 `requestCode:`请求码。这是一次权限申请的标识,如果一个页面内有多处申请权限的地方,请确保请求码不同。 `describe:`用户拒绝权限时,向用户解释说明的描述。 **自定义权限拒绝的逻辑** ``` @PermissionDenied(requestCode = REQUEST_CODE_CAMERA) private fun deny() { Log.e(TAG, "deny:--- @PermissionDenied ") Toast.makeText(context, "开发者自己处理【@PermissionDenied】逻辑", Toast.LENGTH_SHORT).show() } @PermissionDeniedAndNoLongerAsk(requestCode = REQUEST_CODE_CAMERA) private fun noLongerAsk() { Log.e(TAG, "noLongerAsk:--- @PermissionDeniedAndNoLongerAsk ") Toast.makeText(context, "开发者自己处理【@PermissionDeniedAndNoLongerAsk】逻辑", Toast.LENGTH_SHORT) .show() } ``` ## 六、相关注解说明 `@CheckPermission`(必选) <br>检查权限。如果是Android6.0以下设备,直接执行方法;如果是6.0及以上设备,先判断是否已经获得了权限, 如果获得了权限,直接执行方法,如果没有权限,就向系统申请权限。 `@PermissionDenied`(非必选) <br>用户拒绝了权限,且没有勾选【不再询问】)。默认的话,框架内部会弹框向用户解释权限,如果加了这个注解的话,就由开发者自定义拒绝权限的逻辑。 `@PermissionDeniedAndNoLongerAsk`(非必选) <br>用户拒绝了权限,且勾选了【不再询问】)。默认的话,框架内部会弹框提示向用户解释权限,并且引导用户打开`设置-应用`去手动授权。如果加了这个注解的话,就由开发者自定义这个逻辑。 ## Question Q1:Default interface methods are only supported starting with Android N (--min-api 24): void org.aspectj.lang.ProceedingJoinPoint.stack$AroundClosure(org.aspectj.runtime.internal.AroundClosure) ``` android { ...... //指定jdk版本 compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } ```