在好例子网,分享、交流、成长!
您当前所在位置:首页Others 开发实例一般编程问题 → PermissionsDispatcher:处理Android运行时权限的声明性API

PermissionsDispatcher:处理Android运行时权限的声明性API

一般编程问题

下载此实例
  • 开发语言:Others
  • 实例大小:0.30M
  • 下载次数:0
  • 浏览次数:8
  • 发布时间:2024-03-03
  • 实例类别:一般编程问题
  • 发 布 人:chenxiaolan
  • 文件格式:.zip
  • 所需积分:2
 相关标签: Android patch API and pat

实例介绍

【实例简介】

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

标签: Android patch API and pat

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警