android开发之调皮的权限

作者: 安卓小煜 | 来源:发表于2017-04-22 13:45 被阅读98次

文章背景

撰写本文的目的在于帮助开发者们解决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。
有任何想法欢迎交流。
演示截图如下:


权限申请

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

相关文章

  • android开发之调皮的权限

    文章背景 撰写本文的目的在于帮助开发者们解决android中动态申请权限的坑。 在android6.0以前,申请权...

  • Android6.0新特性之权限申请

    Android开发新特性之权限详解 Android6.0之后引入了一个新的应用权限模型,期望对用户更容易理解,更易...

  • [Android]USB开发

    声明:主要参照文档:Android开发之USB数据通信安卓USB通信之权限管理 第一:请求权限和请求权限回调(通过...

  • android 批量申请权限

    Android开发时,到6.0系统上之后,有的权限就得申请才能用了。Android将权限分为正常权限 和 危险权限...

  • 2021-03-03

    Android开发之运行时权限 身为安卓开发同学,一定少不了和权限打交道,在这里我将结合我踩过的坑对这部分开发知识...

  • Android Wifi相关操作

    Android WIFI 参考链接 android开发中Wifi功能总结 概念 相关权限 权限说明动态申请andr...

  • 2018-10-16【权限申请管理(单个权限和多个权限申请)】

    Android开发时,到6.0系统上之后,有的权限就得申请才能用了。 Android将权限分为正常权限 和 危险权...

  • 组件化-权限管理

    权限是一个高度重视的问题,这里我们主要介绍Android开发中常用的两种权限,git权限和Android权限。 g...

  • android 6.0权限

    android 权限总结 以及权限工具类介绍 在android 6.0以前 开发者想要什么权限只需要在AndMan...

  • Android权限(二)

    在Android权限(一)中,介绍了Android中的所有权限。随着Android 6.0发布以及普及,我们开发者...

网友评论

    本文标题:android开发之调皮的权限

    本文链接:https://www.haomeiwen.com/subject/qurczttx.html