android开发之调皮的权限

简介: 文章背景撰写本文的目的在于帮助开发者们解决android中动态申请权限的坑。在android6.0以前,申请权限的方式很简单,只需要在清单文件AndroidManifest.xml中申请即可。

文章背景

撰写本文的目的在于帮助开发者们解决android中动态申请权限的坑。

在android6.0以前,申请权限的方式很简单,只需要在清单文件AndroidManifest.xml中申请即可。需要用到时系统会弹框提示用户选择需要的权限。

但是android6.0之后,权限需要进行动态申请。而且有些基础权限也需要申请,而这些容易被开发者忽略的权限可能会导致原本正常运行的程序出现各种各样的坑。

本文就是为了解决这些坑,为了让广大开发者避免掉坑而撰写的

适用平台

目前适合所有android平台。

使用场景

对android6.0以上系统有大作用,兼容android6.0以下系统。
毕竟android6.0以上权限才开始变得调皮,需要动态申请了。
尤其适合需要用到权限的APP。
特别是之前用户完全没有感知的存储权限的申请更加适用。

具体方案

google既然引入了动态权限申请,自然有一套API来处理。
但是google的API不够直观,并且比较基础。

本人参照了一些资料,然后自己写了一个demo,已经开源到github。
大家可以上去观看。欢迎star、follow、提issue
PermissionManager

下面说下具体的用法:(github上也有说明)

  1. 拷贝permission包下的所有文件到你的项目中。
  2. 定义PermissionHelper变量。
private PermissionHelper permissionHelper;
  1. 在需要检查权限的地方调用doPermissionCheck()方法。
  /**
     * 检查是否拥有权限
     */
    private void doPermissionCheck(){
        permissionHelper = PermissionHelper.getInstance(this);
        permissionHelper
                .setForceAccepting(true) // default is false. its here so you know that it exists.
                .request(permissionArrays);
    }

这里的permissionArrays就是你要申请的权限的数组,目前支持申请单个权限和多个权限,只需要在这里配置即可。比如示例代码:

 final String[] permissionArrays = {Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_SMS};
  1. 实现OnPermissionCallback回调接口。
  2. 在实现的回调方法里面做各自的事情。具体逻辑可以参考github上代码。
//用户点击允许权限回调
 @Override
    public void onPermissionGranted(@NonNull String[] permissionName) {
    }

    @Override
    public void onPermissionDeclined(@NonNull String[] permissionName) {
    }

 //权限已经打开了
    @Override
    public void onPermissionPreGranted(@NonNull String permissionsName) {
    }

    //需要申请权限
    @Override
    public void onPermissionNeedExplanation(@NonNull String permissionName) {
        permissionHelper.requestAfterExplanation(permissionName);
    }

 //用户点击禁止权限并且不再提示时回调
    @Override
    public void onPermissionReallyDeclined(@NonNull String permissionName) {
    }

    //android6.0以下会触发
    @Override
    public void onNoPermissionNeeded() {
    }

    //记得手动重写这个方法
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        permissionHelper.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }

github上的代码演示的是一次性强制申请单个或多个权限的用法。
至于非强制性申请以及其他各种场景,各位有需要的可以评论留言或者到github上提issue。
有任何想法欢迎交流。
演示截图如下:


权限申请

如果本文对你有所帮助,欢迎关注、喜欢、赞赏

相关文章
|
8月前
|
存储 Android开发
如何查看Flutter应用在Android设备上已被撤销的权限?
如何查看Flutter应用在Android设备上已被撤销的权限?
368 64
|
2月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
319 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
2月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
293 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
2月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
671 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
3月前
|
开发工具 Android开发
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
554 11
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
|
2月前
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
180 0
|
3月前
|
Java 开发工具 Maven
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
249 6
|
5月前
|
安全 数据库 Android开发
在Android开发中实现两个Intent跳转及数据交换的方法
总结上述内容,在Android开发中,Intent不仅是活动跳转的桥梁,也是两个活动之间进行数据交换的媒介。运用Intent传递数据时需注意数据类型、传输大小限制以及安全性问题的处理,以确保应用的健壯性和安全性。
409 11
|
8月前
|
存储 Android开发 数据安全/隐私保护
如何在Android设备上撤销Flutter应用程序的所有权限?
如何在Android设备上撤销Flutter应用程序的所有权限?
493 64
|
5月前
|
移动开发 Java 编译器
Kotlin与Jetpack Compose:Android开发生态的演进与架构思考
本文从资深Android工程师视角深入分析Kotlin与Jetpack Compose在Android系统中的技术定位。Kotlin通过空安全、协程等特性解决了Java在移动开发中的痛点,成为Android官方首选语言。Jetpack Compose则引入声明式UI范式,通过重组机制实现高效UI更新。两者结合不仅提升开发效率,更为跨平台战略和现代架构模式提供技术基础,代表了Android开发生态的根本性演进。
240 0