实例介绍
【实例简介】
PermissionsDispatcher:处理Android运行时权限的声明性API。源码下载。permissions-dispatcher是一个提供简单基于注解的API来处理运行时权限的库。它减轻了编写大量检查语句以判断权限是否被授予的负担,使代码更加清晰和安全。
使用:
Kotlin: 可以选择使用ktx或kapt。
Java: apt
这是最简单的示例,您可以注册一个需要Manifest.permission.CAMERA的MainActivity。
0. 准备AndroidManifest
将以下行添加到AndroidManifest.xml中:
<uses-permission android:name="android.permission.CAMERA" />
1. 添加注解
PermissionsDispatcher只引入了少量注解,保持其通用API简洁:
注意:注解方法不能是私有的。
注解
必需
描述
@RuntimePermissions
✓
注册一个要处理权限的Activity或Fragment
@NeedsPermission
✓
注解一个执行需要一个或多个权限的操作的方法
@OnShowRationale
注解一个解释为什么需要权限的方法。它传入一个PermissionRequest对象,可以用于根据用户输入继续或中止当前权限请求。如果您不为该方法指定任何参数,编译器将生成process${NeedsPermissionMethodName}ProcessRequest和cancel${NeedsPermissionMethodName}ProcessRequest。您可以在这些方法中使用这些方法代替PermissionRequest(例如,使用DialogFragment)
@OnPermissionDenied
注解一个在用户不授予权限时调用的方法
@OnNeverAskAgain
注解一个在用户选择设备“永不再询问”某个权限时调用的方法
@RuntimePermissions
class MainActivity : AppCompatActivity(), View.OnClickListener {
@NeedsPermission(Manifest.permission.CAMERA)
fun showCamera() {
supportFragmentManager.beginTransaction()
.replace(R.id.sample_content_fragment, CameraPreviewFragment.newInstance())
.addToBackStack("camera")
.commitAllowingStateLoss()
}
@OnShowRationale(Manifest.permission.CAMERA)
fun showRationaleForCamera(request: PermissionRequest) {
showRationaleDialog(R.string.permission_camera_rationale, request)
}
@OnPermissionDenied(Manifest.permission.CAMERA)
fun onCameraDenied() {
Toast.makeText(this, R.string.permission_camera_denied, Toast.LENGTH_SHORT).show()
}
@OnNeverAskAgain(Manifest.permission.CAMERA)
fun onCameraNeverAskAgain() {
Toast.makeText(this, R.string.permission_camera_never_askagain, Toast.LENGTH_SHORT).show()
}
}
2. 委托给生成的函数
现在生成的函数比Java版本更简洁直观!
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
findViewById(R.id.button_camera).setOnClickListener {
// 注意:将权限处理委托给生成的函数
showCameraWithPermissionCheck()
}
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
// 注意:将权限处理委托给生成的函数
onRequestPermissionsResult(requestCode, grantResults)
}
查看示例以获取更多细节。
其他功能/插件
获取特殊权限
maxSdkVersion
IntelliJ插件
AndroidAnnotations插件
安装
注意:
如果您使用的是jCenter,我们已经转向MavenCentral,请参阅迁移指南。
4.x仅支持Jetpack。如果您仍在使用appcompat,则应使用3.x。
要将PermissionsDispatcher添加到您的项目中,请在您的应用程序模块的build.gradle文件中包含以下内容:
${latest.version}是
dependencies {
implementation "com.github.permissions-dispatcher:permissionsdispatcher:${latest.version}"
annotationProcessor "com.github.permissions-dispatcher:permissionsdispatcher-processor:${latest.version}"
}
带有Kotlin的:
apply plugin: 'kotlin-kapt'
dependencies {
implementation "com.github.permissions-dispatcher:permissionsdispatcher:${latest.version}"
kapt "com.github.permissions-dispatcher:permissionsdispatcher-processor:${latest.version}"
}
【实例截图】
【核心代码】
文件清单
└── PermissionsDispatcher-74b532bf1fe430fb12ad8414b80399f2d7cfc954
├── annotation
│ ├── build.gradle
│ ├── gradle.properties
│ └── src
│ └── main
│ └── java
│ └── permissions
│ └── dispatcher
│ ├── GrantableRequest.java
│ ├── NeedsPermission.java
│ ├── OnNeverAskAgain.java
│ ├── OnPermissionDenied.java
│ ├── OnShowRationale.java
│ ├── PermissionRequest.java
│ └── RuntimePermissions.java
├── build.gradle
├── buildSrc
│ ├── build.gradle
│ └── src
│ └── main
│ └── groovy
│ └── permissions
│ └── dispatcher
│ ├── AarToJarDependencyPlugin.groovy
│ ├── AndroidJarDependencyExtension.groovy
│ └── AndroidJarDependencyPlugin.groovy
├── CHANGELOG.md
├── doc
│ ├── java_usage.md
│ ├── maxsdkversion.md
│ ├── migration_guide.md
│ └── special_permissions.md
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── ktx
│ ├── build.gradle
│ ├── gradle.properties
│ ├── README.md
│ └── src
│ ├── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ └── permissions
│ │ └── dispatcher
│ │ └── ktx
│ │ ├── ActivityExtensions.kt
│ │ ├── Event.kt
│ │ ├── FragmentExtensions.kt
│ │ ├── KtxPermissionRequest.kt
│ │ ├── LocationPermission.kt
│ │ ├── PermissionRequestFragment.kt
│ │ ├── PermissionRequestResult.kt
│ │ ├── PermissionRequestType.kt
│ │ ├── PermissionRequestViewModel.kt
│ │ ├── PermissionsRequesterImpl.kt
│ │ ├── PermissionsRequester.kt
│ │ └── TypeAliases.kt
│ └── test
│ ├── java
│ │ └── permissions
│ │ └── dispatcher
│ │ └── test
│ │ ├── EventTest.kt
│ │ ├── KtxPermissionRequestTest.kt
│ │ ├── LocationPermissionTest.kt
│ │ └── PermissionRequestViewModelTest.kt
│ └── resources
│ └── mockito-extensions
│ └── org.mockito.plugins.MockMaker
├── ktx-sample
│ ├── build.gradle
│ └── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── permissions
│ │ └── dispatcher
│ │ └── ktx
│ │ └── sample
│ │ ├── MainActivity.kt
│ │ └── MainFragment.kt
│ └── res
│ ├── layout
│ │ ├── activity_main.xml
│ │ ├── fragment_camera.xml
│ │ └── fragment_main.xml
│ ├── mipmap-hdpi
│ │ └── ic_launcher.png
│ ├── mipmap-mdpi
│ │ └── ic_launcher.png
│ ├── mipmap-xhdpi
│ │ └── ic_launcher.png
│ ├── mipmap-xxhdpi
│ │ └── ic_launcher.png
│ └── values
│ ├── dimens.xml
│ ├── strings.xml
│ └── template-styles.xml
├── library
│ ├── build.gradle
│ ├── gradle.properties
│ └── src
│ ├── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ └── permissions
│ │ └── dispatcher
│ │ └── PermissionUtils.java
│ └── test
│ └── java
│ └── permissions
│ └── dispatcher
│ └── ApiLevelTestSuite.java
├── LICENSE
├── lint
│ ├── build.gradle
│ └── src
│ ├── main
│ │ └── java
│ │ └── permissions
│ │ └── dispatcher
│ │ ├── CallNeedsPermissionDetector.java
│ │ ├── CallOnRequestPermissionsResultDetector.java
│ │ ├── NoCorrespondingNeedsPermissionDetector.java
│ │ ├── NoDelegateOnResumeDetector.java
│ │ └── PermissionsDispatcherIssueRegistry.java
│ └── test
│ └── java
│ └── permissions
│ └── dispatcher
│ ├── CallNeedsPermissionDetectorKtTest.kt
│ ├── CallNeedsPermissionDetectorTest.kt
│ ├── CallOnRequestPermissionsResultDetectorKtTest.kt
│ ├── CallOnRequestPermissionsResultDetectorTest.kt
│ ├── NoCorrespondingNeedsPermissionDetectorKtTest.kt
│ ├── NoCorrespondingNeedsPermissionDetectorTest.kt
│ ├── NoDelegateOnResumeDetectorKtTest.kt
│ ├── NoDelegateOnResumeDetectorTest.kt
│ ├── PermissionsDispatcherIssueRegistryTest.kt
│ └── Utils.kt
├── processor
│ ├── build.gradle
│ ├── gradle.properties
│ └── src
│ ├── main
│ │ ├── kotlin
│ │ │ └── permissions
│ │ │ └── dispatcher
│ │ │ └── processor
│ │ │ ├── exception
│ │ │ │ ├── DuplicatedMethodNameException.kt
│ │ │ │ ├── DuplicatedValueException.kt
│ │ │ │ ├── MixPermissionTypeException.kt
│ │ │ │ ├── NoAnnotatedMethodsException.kt
│ │ │ │ ├── NoParametersAllowedException.kt
│ │ │ │ ├── NoThrowsAllowedException.kt
│ │ │ │ ├── PrivateMethodException.kt
│ │ │ │ ├── SpecialPermissionsWithNeverAskAgainException.kt
│ │ │ │ ├── WrongClassException.kt
│ │ │ │ ├── WrongParametersException.kt
│ │ │ │ └── WrongReturnTypeException.kt
│ │ │ ├── impl
│ │ │ │ ├── java
│ │ │ │ │ ├── JavaActivityProcessorUnit.kt
│ │ │ │ │ ├── JavaBaseProcessorUnit.kt
│ │ │ │ │ ├── JavaFragmentProcessorUnit.kt
│ │ │ │ │ ├── SensitivePermissionInterface.kt
│ │ │ │ │ ├── SystemAlertWindowHelper.kt
│ │ │ │ │ └── WriteSettingsHelper.kt
│ │ │ │ └── kotlin
│ │ │ │ ├── KotlinActivityProcessorUnit.kt
│ │ │ │ ├── KotlinBaseProcessorUnit.kt
│ │ │ │ ├── KotlinFragmentProcessorUnit.kt
│ │ │ │ ├── SensitivePermissionInterface.kt
│ │ │ │ ├── SystemAlertWindowHelper.kt
│ │ │ │ └── WriteSettingsHelper.kt
│ │ │ ├── PermissionsProcessor.kt
│ │ │ ├── ProcessorUnit.kt
│ │ │ ├── RequestCodeProvider.kt
│ │ │ ├── RuntimePermissionsElement.kt
│ │ │ └── util
│ │ │ ├── Constants.kt
│ │ │ ├── Extensions.kt
│ │ │ ├── Helpers.kt
│ │ │ └── Validators.kt
│ │ └── resources
│ │ └── META-INF
│ │ ├── gradle
│ │ │ └── incremental.annotation.processors
│ │ └── services
│ │ └── javax.annotation.processing.Processor
│ └── test
│ ├── java
│ │ └── permissions
│ │ └── dispatcher
│ │ └── processor
│ │ ├── base
│ │ │ ├── AndroidAwareClassLoader.java
│ │ │ ├── BaseTest.java
│ │ │ ├── StringEquals.java
│ │ │ └── TestSuite.java
│ │ ├── data
│ │ │ └── Source.java
│ │ ├── KtProcessorTestSuite.kt
│ │ ├── ProcessorTestSuite.java
│ │ └── util
│ │ └── ExtensionsTest.kt
│ └── resources
│ └── mockito-extensions
│ └── org.mockito.plugins.MockMaker
├── README.md
├── sample
│ ├── build.gradle
│ └── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── kotlin
│ │ └── permissions
│ │ └── dispatcher
│ │ └── sample
│ │ ├── camera
│ │ │ ├── CameraPreviewFragment.kt
│ │ │ └── CameraPreview.kt
│ │ ├── contacts
│ │ │ └── ContactsFragment.kt
│ │ └── MainActivity.kt
│ └── res
│ ├── layout
│ │ ├── activity_main.xml
│ │ ├── fragment_camera.xml
│ │ └── fragment_contacts.xml
│ ├── mipmap-hdpi
│ │ └── ic_launcher.png
│ ├── mipmap-mdpi
│ │ └── ic_launcher.png
│ ├── mipmap-xhdpi
│ │ └── ic_launcher.png
│ ├── mipmap-xxhdpi
│ │ └── ic_launcher.png
│ └── values
│ ├── dimens.xml
│ ├── strings.xml
│ └── template-styles.xml
├── settings.gradle
└── test
├── build.gradle
└── src
├── main
│ ├── AndroidManifest.xml
│ └── java
│ └── permissions
│ └── dispatcher
│ └── test
│ ├── ActivityOnlyNeedsPermission.java
│ ├── ActivityWithAllAnnotations.java
│ ├── ActivityWithAllAnnotationsKt.kt
│ ├── ActivityWithNoParameterArgumentKt.kt
│ ├── ActivityWithOnNeverAskAgain.java
│ ├── ActivityWithOnPermissionDenied.java
│ ├── ActivityWithParametersKt.kt
│ ├── ActivityWithShowRationale.java
│ ├── ActivityWithSystemAlertWindowAllAnnotations.java
│ ├── ActivityWithSystemAlertWindow.java
│ ├── ActivityWithSystemAlertWindowKtAllAnnotations.kt
│ ├── ActivityWithSystemAlertWindowKt.kt
│ ├── ActivityWithWriteSettingAllAnnotations.java
│ ├── ActivityWithWriteSetting.java
│ ├── ActivityWithWriteSettingKtAllAnnotations.kt
│ ├── ActivityWithWriteSettingKt.kt
│ ├── FragmentWithAllAnnotations.java
│ └── FragmentWithAllAnnotationsKt.kt
└── test
└── java
└── permissions
└── dispatcher
└── test
├── ActivityOnlyNeedsPermissionPermissionsDispatcherTest.kt
├── ActivityWithAllAnnotationsKtPermissionsDispatcherTest.kt
├── ActivityWithAllAnnotationsPermissionsDispatcherTest.kt
├── ActivityWithNoParameterArgumentKtPermissionsDispatcherTest.kt
├── ActivityWithOnNeverAskAgainPermissionsDispatcherTest.kt
├── ActivityWithOnPermissionDeniedPermissionsDispatcherTest.kt
├── ActivityWithParametersKtPermissionsDispatcherTest.kt
├── ActivityWithShowRationalePermissionsDispatcherTest.kt
├── ActivityWithSystemAlertWindowAllAnnotationsPermissionsDispatcherTest.kt
├── ActivityWithSystemAlertWindowKtAllAnnotationsTest.kt
├── ActivityWithSystemAlertWindowKtTest.kt
├── ActivityWithSystemAlertWindowPermissionsDispatcherTest.kt
├── ActivityWithWriteSettingAllAnnotationsPermissionsDispatcherTest.kt
├── ActivityWithWriteSettingKtAllAnnotationsTest.kt
├── ActivityWithWriteSettingKtTest.kt
├── ActivityWithWriteSettingPermissionsDispatcherTest.kt
├── Extensions.kt
├── FragmentWithAllAnnotationsKtPermissionsDispatcherTest.kt
└── FragmentWithAllAnnotationsPermissionsDispatcherTest.kt
119 directories, 182 files
相关软件
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论