Android 动态申请授权 Request App Permissions
发布日期:2021-06-30 14:57:41 浏览次数:2 分类:技术文章

本文共 1851 字,大约阅读时间需要 6 分钟。

相关知识点

  • 写外部存储器

  • 已将权限授予给定的包

  • 检测 App 当前是否有XXX的权限

  • 动态向用户申请权限

  • 动态向用户申请权限,用户操作后的回调

代码

基本逻辑就是:

  1. 运行时当每一次需要使用某一权限,首先检测是否已经获得授权。
  2. 如果已经授权,直接使用。
  3. 否则动态申请用户授权。(用户会看到一个提示窗口,用户同意或拒绝后会触发回调)
  4. 回调中我们可以逐一处理每个申请的权限,判断是否获得后做相应操作。
    动态申请的权限应该是 AndroidManifest.xml 中声明过的。
/**     *  点击 【my_button】按钮,     */    @OnClick(R.id.my_button)    public void clickMyButton() {
// 检测当前 App 是否有【写外部存储器】的权限 if (ContextCompat.checkSelfPermission(this, // 当前 activity Manifest.permission.WRITE_EXTERNAL_STORAGE) // 写外部存储器权限 != PackageManager.PERMISSION_GRANTED) {
// != 已授权 // 没法有获得授权,这里则动态向用户申请权限 ActivityCompat.requestPermissions(this,// 当前 activity new String[]{
Manifest.permission.WRITE_EXTERNAL_STORAGE}, // 写外部存储器权限 REQUEST_STORAGE_PERMISSION); // 自定的常量,会作为 requestCode 传给回调函数 } else {
launchCamera(); // 调用相机 } } /** * 动态申请权限,用户操作后回调 * @param requestCode 申请权限时发的自定义常量 * @param permissions 应该就是 requestPermissions 的第二个参数 String[] permissions * @param grantResults 一个数组,保存着所有申请的权限结果 */ @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case REQUEST_STORAGE_PERMISSION: {
// 如果是申请【写外部存储器权限】 // 可以同时申请多个权限,所以这里是每个权限是否成功的结果。 // 上面我们只申请了一个权限,所以这里判断 > 0 后可以直接取第一个出来判断。 if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 如果获得权限,执行这里: launchCamera(); // 调用相机 } else {
// 如果未获得权限,弹个提示。 Toast.makeText(this, R.string.permission_denied, Toast.LENGTH_SHORT).show(); } break; } } }

转载地址:https://jerryjin.blog.csdn.net/article/details/86702460 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Java 利用入栈出栈翻转排序
下一篇:Android 学习笔记 《权限概述——Permissions overview》

发表评论

最新留言

不错!
[***.144.177.141]2024年04月10日 20时34分13秒