返回顶部
首页 > 资讯 > 移动开发 >Android---动态权限申请
  • 248
分享到

Android---动态权限申请

android数码相机 2023-09-05 12:09:16 248人浏览 薄情痞子
摘要

目录 权限分类 动态权限核心函数 简易实现案例 完整代码     Google 在 Android 6.0 开始引入了权限申请机制,将所有权限分成了正常权限和危险权限。App 每次在使用危险权限时需要动态的申请并得到用户的授权才能使用。 权

目录

权限分类

动态权限核心函数

简易实现案例

完整代码

 

 

Google 在 Android 6.0 开始引入了权限申请机制,将所有权限分成了正常权限危险权限。App 每次在使用危险权限时需要动态的申请并得到用户的授权才能使用。

权限分类

系统权限分为两类:正常权限危险权限。

正常权限:不会直接给用户隐私带来危险。如果你在其清单中列出了正常权限,系统将自动授予该权限。

危险权限:授予应用访问用户机密数据的权限。如果你在清单文件中列出了危险权限,则用户必须明确批准你的应用使用这些权限。那么危险权限有那些?日历(CALENDAR)相机(CAMERA) 通讯录(CONTACTS)位置(LOCATION)拨号(PHONE)短信(SMS)存储(STORAGE)等。

申请以上权限时,除了要在清单文件中添加权限,还需要通过代码动态申请。

动态权限核心函数

检测权限

checkSelfPermission(@NonNull String permission)

申请权限

requestPermissions(@NonNull String[] permissions, int requestCode)

处理结果回调

onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)

是否需要显示 UI 界面提示用户为什么需要这个权限

shouldShowRequestPermissionRationale(@NonNull String permission)

简易实现案例

步骤1:在 AndroidManifest.xml 添加要申请的权限。这里以存储权限为例

骤2:封装一个 requestPermission 方法来动态检测和申请权限

    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);                requestPermission();    }

 requestPermission() 函数里会先检测存储权限,如果没开启则动态申请存储权限。

private void requestPermission() {        // checkSelfPermission() 检测权限        if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)        != PackageManager.PERMISSION_GRANTED) {            //TODO 申请存储权限            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},                    PERMISSION_REQUEST_CODE);        }    }

注意:这个 demo 里只申请了一个权限,当我们需要申请多个权限时,可以往requestPermissions 里的第二个参数添加其它需要的权限,因为它本就是一个 String 数组,且也要在 AndroidManifest里添加。

new String[]{Manifest.permission.READ_EXTERNAL_STORAGE                    ,Manifest.permission.CAMERA}

步骤3:处理用户选择的结果(“允许” / “拒绝”),重写 onRequestPermissionsResult()方法。

//TODO 处理权限结果回调    @Override    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {        super.onRequestPermissionsResult(requestCode, permissions, grantResults);        if (requestCode == PERMISSION_REQUEST_CODE) {            //用户点击了“确定” == grantResults[0] == PackageManager.PERMISSION_GRANTED)            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {                Log.i("TAG", "onRequestPermissionsResult granted");            } else {                Log.i("TAG", "onRequestPermissionsResult denied");                // TODO 用户拒绝权限申请,则弹出警示框                showWaringDialog();            }        }    }

步骤4:当用户拒绝权限,则弹出警示框,并在用户点击“确定”后直接退出页面。因为没有存储权限肯定不能使用该应用的。

    private void showWaringDialog() {        new AlertDialog.Builder(this)                .setTitle("警告!")                .setMessage("请前往设置->应用->权限管理->打开存储权限,否则无法正常使用!")                .setPositiveButton("确定", new DialogInterface.OnClickListener() {                    @Override                    public void onClick(DialogInterface dialog, int which) {                        //TODO 一般情况下如果用户不授权的话,功能时无法运行的,则直接退出                        finish();                    }                }).show();    }

完整代码

MainActivity.java

package com.example.dynamicauthority;import androidx.annotation.NonNull;import androidx.appcompat.app.AppCompatActivity;import androidx.core.app.ActivityCompat;import androidx.core.content.ContextCompat;import android.Manifest;import android.app.AlertDialog;import android.content.DialogInterface;import android.content.pm.PackageManager;import android.os.Bundle;import android.util.Log;public class MainActivity extends AppCompatActivity {    private static final int PERMISSION_REQUEST_CODE = 999;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        requestPermission();    }    private void requestPermission() {        // checkSelfPermission() 检测权限        if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)        != PackageManager.PERMISSION_GRANTED) {            //TODO 申请存储权限            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},                    PERMISSION_REQUEST_CODE);        }    }    //TODO 处理权限结果回调    @Override    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {        super.onRequestPermissionsResult(requestCode, permissions, grantResults);        if (requestCode == PERMISSION_REQUEST_CODE) {            //用户点击了“确定” == grantResults[0] == PackageManager.PERMISSION_GRANTED)            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {                Log.i("TAG", "onRequestPermissionsResult granted");            } else {                Log.i("TAG", "onRequestPermissionsResult denied");                // TODO 用户拒绝权限申请,则弹出警示框                showWaringDialog();            }        }    }        private void showWaringDialog() {        new AlertDialog.Builder(this)                .setTitle("警告!")                .setMessage("请前往设置->应用->权限管理->打开存储权限,否则无法正常使用!")                .setPositiveButton("确定", new DialogInterface.OnClickListener() {                    @Override                    public void onClick(DialogInterface dialog, int which) {                        //TODO 一般情况下如果用户不授权的话,功能时无法运行的,则直接退出                        finish();                    }                }).show();    }}

来源地址:https://blog.csdn.net/qq_44950283/article/details/129637724

--结束END--

本文标题: Android---动态权限申请

本文链接: https://lsjlt.com/news/395323.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Android---动态权限申请
    目录 权限分类 动态权限核心函数 简易实现案例 完整代码     Google 在 Android 6.0 开始引入了权限申请机制,将所有权限分成了正常权限和危险权限。App 每次在使用危险权限时需要动态的申请并得到用户的授权才能使用。 权...
    99+
    2023-09-05
    android 数码相机
  • Android动态权限申请详解
    目录前言使用方案绕过生命周期检测最终实现总结前言 注:只想看实现的朋友们可以直接跳到最后面的最终实现 大家是否还在为动态权限申请感到苦恼呢?传统的动态权限申请需要在Activity中...
    99+
    2023-05-17
    Android动态权限申请 Android权限申请
  • Android 6.0动态权限申请教程
    PermissionManage 项目地址:https://github.com/why168/AndroidProjects/tree/master/PermissionMa...
    99+
    2022-06-06
    动态 教程 Android
  • Android 6.0中怎么申请动态权限
    Android 6.0中怎么申请动态权限?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。如果设备运行的是 Android 6.0(API 级别 23)或更高版本,并且应用的 ta...
    99+
    2023-05-31
    android android6.0 roi
  • android 12 SD动态申请读写权限
    android 12 如何动态申请读写权限 android 12不仅需要在AndroidManifest.xml申请读写权限也需要在代码中动态的申请 关于如何动态申请读写权限仅需要两步 在AndroidManifest.xml文件中申...
    99+
    2023-08-16
    android java 开发语言
  • Android动态权限申请如何实现
    本篇内容介绍了“Android动态权限申请如何实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Google 在 Android 6.0 开...
    99+
    2023-07-05
  • 安卓动态申请权限
    我们在使用一些官方app时,刚下载进去之后经常会弹出各种各样的权限获取请求,今天简单学习了下,希望不会误人子弟哈哈哈哈。 一、将需要用到的权限添加到Manifest清单里  这一步很重要,本人Debug时发现如果缺少这步,进入...
    99+
    2023-09-21
    android
  • Android registerForActivityResult动态申请权限案例详解
    前言 这几天在做一个小工具app,结果在fragment里面动态申请权限提示原有的申请方法已经弃用,还画了很明显的删除线。。。这叫一个强迫症的我怎么受得了。赶紧网上找资料也找不出什么...
    99+
    2024-04-02
  • Android AOP切面编程+动态权限申请
    AOP+动态权限申请 最近在利用AspectJ做埋点,突发奇想,能否也用类似方法做动态权限申请?发现可以。我来介绍一下我的思路。 AOP是什么 ...
    99+
    2022-06-06
    aop 动态 Android
  • Android动态权限申请实现步骤分解
    目录权限分类动态权限核心函数简易实现案例完整代码 Google 在 Android 6.0 开始引入了权限申请机制,将所有权限分成了正常权限和危险权限。App 每次在使用危险权限时需...
    99+
    2023-05-14
    Android动态权限申请 Android权限动态申请 Android申请权限
  • Android 开发中的权限申请
    一、权限动态申请         我们都知道,从 Android 6.0 开始,部分危险权限在 xml 注册的同时,还需要动态申请。 1、需要动态申请的权限 Manifest.permission.CONTACTS //联系人Manifes...
    99+
    2023-09-01
    android
  • Android申请相机权限和读写权限实例
    开发一个相机应用,需要申请三个权限:相机、读文件、写文件。 1、在AndroidManifest.xml中添加 <uses-permission android:name="a...
    99+
    2024-04-02
  • Android6.0动态申请权限所遇到的问题小结
    白天在做SDK23版本的适配,遇到了不少坑,现在抽空记下来,以此为戒。 首先要知道哪些坑,就得先了解一些定义和基本使用方式。 那么先介绍一下动态申请的权限分组情况。 下面的...
    99+
    2022-06-06
    小结 动态 Android
  • Android 6.0权限申请详解及权限资料整理
    在android 6.0开始,部分的权限需要我们动态申请,也就是说当我们的打开app的时候系统不会主动像您申请app所需要的部分权限,需要客户在使用app的时候主动的去申请。 ...
    99+
    2022-06-06
    Android
  • Android 程序申请权限注意事项
    为Android 程序申请权限注意 Android系统提供为程序提供了权限申请,即在manifest中使用uses-permission来申请即可.实现起来非常简单,但是有些问...
    99+
    2022-06-06
    程序 Android
  • Android动态获取权限
    Android权限分为普通权限和危险权限两种。普通权限系统会自动授权,而危险权限则需要用户手动授权,否则无法使用相关功能。 危险权限的获取 以调...
    99+
    2022-06-06
    Android
  • Android Permission 权限申请,EasyPermission和其他三方库
    在Android的实际开发中,经常会因为需求的实现,需要申请用户权限。 今天总结下Android中常用的权限申请。 一、基本介绍和流程 Android中的权限申请是通过应用程序与操作系统之间的交互实现的。在Android中,每个应用程序都被...
    99+
    2023-09-07
    android
  • Android 动态权限最全解析
    本文目录动态权限概述动态权限分类动态权限申请方法方法1:官方API提供的方法步骤1:检查是否有权限步骤2:申请权限步骤3:回调函数的处理完整代码...
    99+
    2022-06-06
    动态 Android
  • Android无需申请权限拨打电话的两种方式
    Android打电话有两种实现方法: 第一种方法,拨打电话跳转到拨号界面。源代码如下: Intent intent = new Intent(Intent.ACTION_DI...
    99+
    2022-06-06
    电话 Android
  • 怎样申请阿里云代理权限
    如果你想成为阿里云的代理商,可以按照以下步骤进行申请: 在阿里云官网上注册账户并登录。在登录后,需要进入“我的产品与服务”页面,选择你想要代理的产品和服务。 选择需要代理的地区和行业。不同地区和行业的需求不同,需要选择合适的地区和行业进...
    99+
    2023-10-27
    阿里 权限
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作