https://github.com/boybeak/easypermission
Get permission dynamic
https://github.com/boybeak/easypermission
Last synced: about 1 year ago
JSON representation
Get permission dynamic
- Host: GitHub
- URL: https://github.com/boybeak/easypermission
- Owner: boybeak
- Created: 2019-12-06T13:55:37.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2022-03-29T01:51:07.000Z (over 4 years ago)
- Last Synced: 2025-05-13T00:47:46.429Z (about 1 year ago)
- Language: Java
- Size: 179 KB
- Stars: 4
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README-CN.md
Awesome Lists containing this project
README
# EasyPermission 
## 安装
```groovy
// root project build.gradle
buildscript {
allprojects {
repositories {
google()
jcenter()
}
}
}
```
```groovy
implementation 'com.github.boybeak:easy-permission:${newest_version}'
```
## 使用
**实例1**
```kotlin
EasyPermission.ask(
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.CAMERA,
Manifest.permission.ACCESS_FINE_LOCATION
).go(this, REQUEST_CODE, object : Callback {
override fun onGranted(permissions: MutableList, requestCode: Int) {
TODO("Do sth.")
}
override fun onDenied(permission: String, requestCode: Int, neverAsk: Boolean) {
TODO("Permission denied.")
}
})
```
**实例2**
如果你使用 `kotlin`来开发程序, 你可以使用这种方式.
```kotlin
//this may be Context or Fragment
this.withPermissions(
requestCode = 1,
permissions = *arrayOf(
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.CAMERA,
Manifest.permission.ACCESS_FINE_LOCATION
),
onGranted = { permissions ->
},
onDenied = { permission, requestCode, neverAsk ->
}
)
```
**实例3** - *推荐使用*
这个实例基于 [`AspectJ`](https://github.com/HujiangTechnology/gradle_plugin_android_aspectjx) - 一个 java的**AOP** 库.
> 什么是 [AOP](https://en.wikipedia.org/wiki/Aspect-oriented_programming) ?
>
> 相关: [ASM](https://asm.ow2.io/), 直接在字节码中修改逻辑.
>
> 区别于: [APT](https://medium.com/@mauryahyd/what-is-android-apt-1fca2c4fc95a), 生成新的类.
借助 `easy-permission-aspect` 库,通过该库中提供的 **@RequestPermissions** 和 **@OnPermissionDenied**来获取动态权限.
```groovy
// root project build.gradle
buildscript {
dependencies {
classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.10'
}
}
```
proguard-rules.pro
```groovy
-keepclassmembers class * {
@com.github.boybeak.easypermission.aspect.OnPermissionDenied ;
@com.github.boybeak.easypermission.aspect.RequestPermissions ;
}
```
`com.github.boybeak:easy-permission-aspect:`[  ](https://bintray.com/boybeak/nulldreams/easy-permission-aspect/_latestVersion)
```groovy
// app or some other module's build.gradle
apply plugin: 'android-aspectjx'
// ... some other stuff
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.github.boybeak:easy-permission-aspect:${new_version}'
implementation 'org.aspectj:aspectjrt:1.9.5'
}
```
- 在 **Context**, **Fragment** 或者 **View** 类中
```kotlin
@RequestPermissions(
permissions = [
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION
],
requestCode = REQUEST_CODE
)
fun getLocation() {
//TODO("GET LOCATION")
}
@OnPermissionDenied
fun onGetLocationDenied(permission: String, requestCode: Int, neverAsk: Boolean) {
//TODO("Permission denied")
}
```
- 如果你使用动态权限的方法没有在 **Context**, **Fragment** 或者 **View**类中, 你必须在方法的参数中,传入一个 **Context** 对象作为参数.
```kotlin
@RequestPermissions(
permissions = [
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION
],
requestCode = REQUEST_CODE
)
fun getLocation(context: Context) {
//TODO("GET LOCATION")
}
```