热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

国庆节到了,安利一个Android的自动动态授权插件

Android的老铁都知道申请权限时,除了要在AndroidManifest添加权限,还需要在activity中通过requestpermission对

请添加图片描述
Android的老铁都知道申请权限时,除了要在AndroidManifest添加权限,还需要在activity中通过requestpermission对应的权限,感觉还是有点麻烦的。

要是有个插件,只需要在AndroidManifest中申请的权限,也不需要在activity中一个个requestpermission权限的话,岂不爽哉!

AutoPermit帮你解决这个痛点!

我们来看看如何使用它。

1 AndroidManifest申请权限

在AndroidManifest中申请了如下权限:

<uses-permission android:name&#61;"android.permission.READ_CALENDAR" />
<uses-permission android:name&#61;"android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name&#61;"android.permission.READ_EXTERNAL_STORAGE" />

2 Activity中动态申请权限

2.1 原始动态申请权限方式

if (ContextCompat.checkSelfPermission(getApplication(), Manifest.permission.READ_EXTERNAL_STORAGE) &#61;&#61; PackageManager.PERMISSION_DENIED) { if (Build.VERSION.SDK_INT >&#61; Build.VERSION_CODES.M) { requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 10); }
}
if (ContextCompat.checkSelfPermission(getApplication(), Manifest.permission.WRITE_EXTERNAL_STORAGE) &#61;&#61; PackageManager.PERMISSION_DENIED) { if (Build.VERSION.SDK_INT >&#61; Build.VERSION_CODES.M) { requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 10); }
}
if (ContextCompat.checkSelfPermission(getApplication(), Manifest.permission.READ_CALENDAR) &#61;&#61; PackageManager.PERMISSION_DENIED) { if (Build.VERSION.SDK_INT >&#61; Build.VERSION_CODES.M) { requestPermissions(new String[]{Manifest.permission.READ_CALENDAR}, 10); }
}

是不是觉得很麻烦&#xff0c;若是你申请10个动态权限&#xff0c;岂不是要写10个&#xff0c;我们看看用AutoPermit是什么情况&#xff1f;

2.2 AutoPermit申请权限方式


2.2.1 依赖

在App.build中依赖

maven{url &#39;https://gitee.com/haochen12/HowzitsMaven/raw/master&#39;}

如下&#xff1a;

repositories {maven{url &#39;https://gitee.com/haochen12/HowzitsMaven/raw/master&#39;}}

在build.gradle 中依赖&#xff1a;

implementation &#39;com.howzits.autopermit:autopermit:0.0.1-SNAPSHOT&#39;

2.2.2 使用

AutoPermit有两种方式&#xff0c;一种&#xff0c;完全自动请求权限&#xff1b;另一种&#xff0c;手动请求权限。通过setAuto为true为自动&#xff0c;False为手动。

  • 自动请求权限
    只需要在AndroidManifest中申请权限就可以了&#xff0c;AutoPermit会自动获取哪些权限需要动态申请。

AutoPermit.With(this) .setAuto(true) .setRequestCode(10) .request();

  • 手动请求权限
    除了需要在AndroidManifest中申请权限&#xff0c;还需要在setPermissions中添加对应的权限。

AutoPermit.With(this) .setAuto(false) //.setPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_CALENDAR, Manifest.permission.READ_EXTERNAL_STORAGE}) .setRequestCode(10) .request();

3.权限成功回调

在权限回调成功后可以做相应的处理。

&#64;Override
public void onRequestPermissionsResult(int requestCode, &#64;NonNull String[] permissions, &#64;NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode &#61;&#61; 10) { for (String p : permissions) { Log.e(MainActivity.class.getSimpleName(), "permission:" &#43; p); } }
}

源码地址

AutoPermit github仓库
AutoPermit gitee仓库
欢迎点赞


推荐阅读
  • 本文详细介绍了 Apache Jena 库中的 Txn.executeWrite 方法,通过多个实际代码示例展示了其在不同场景下的应用,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • Scala 实现 UTF-8 编码属性文件读取与克隆
    本文介绍如何使用 Scala 以 UTF-8 编码方式读取属性文件,并实现属性文件的克隆功能。通过这种方式,可以确保配置文件在多线程环境下的一致性和高效性。 ... [详细]
  • 实体映射最强工具类:MapStruct真香 ... [详细]
  • 深入理解Redis的数据结构与对象系统
    本文详细探讨了Redis中的数据结构和对象系统的实现,包括字符串、列表、集合、哈希表和有序集合等五种核心对象类型,以及它们所使用的底层数据结构。通过分析源码和相关文献,帮助读者更好地理解Redis的设计原理。 ... [详细]
  • 本文介绍如何使用 Python 将一个字符串按照指定的行和元素分隔符进行两次拆分,最终将字符串转换为矩阵形式。通过两种不同的方法实现这一功能:一种是使用循环与 split() 方法,另一种是利用列表推导式。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 本文详细介绍了 org.jdesktop.swingx.JXTitledPanel 类中的 setUI() 方法,探讨其功能、使用场景,并提供了多个实际代码示例。 ... [详细]
  • 在创建新的Android项目时,您可能会遇到aapt错误,提示无法打开libstdc++.so.6共享对象文件。本文将探讨该问题的原因及解决方案。 ... [详细]
  • 为了解决不同服务器间共享图片的需求,我们最初考虑建立一个FTP图片服务器。然而,考虑到项目是一个简单的CMS系统,为了简化流程,团队决定探索七牛云存储的解决方案。本文将详细介绍使用七牛云存储的过程和心得。 ... [详细]
author-avatar
xia
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有