Android请求权限之不再询问或禁止不再提示

2024-01-02 11:10

本文主要是介绍Android请求权限之不再询问或禁止不再提示,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在应用申请权限时,如果用户选择了禁止后不再提示(不再询问),那么未来再次向用户请求该权限时,系统将会默认禁止该权限。这时候只能靠用户手动去授予权限,通过设计一个提示选择框来让用户选择,如果用户的确是想要授予该权限,那么就跳转至该应用的权限设置界面。

在这里插入图片描述

1、判断该权限是否处于禁止后不再提示(不再询问)
2、提醒用户我们需要该权限,是否前往设置
3、跳转当前应用的权限设置页面

1、检查权限状态

使用 ContextCompat.checkSelfPermission() 方法来检查权限的授予状态。它将返回一个常量值,这个在 上篇文章 中有提到过。然后再使用 ActivityCompat.shouldShowRequestPermissionRationale() 方法判断该权限是否能够弹出带有请求权限的弹窗,这个是判断权限是否处于不再询问状态的重要方法。

根据上面两个方法,结合其逻辑则需要 checkSelfPermission() 方法返回“权限未被授予的状态常量”,同时 shouldShowRequestPermissionRationale() 方法判断该权限为“无法弹出权限申请框”,也就是返回布尔值 false。

同时满足上面这两个条件就表示该权限处于不再询问的状态。判断权限是否处于不再询问状态的代码有点小BUG,它必须申请过一次权限并且用户做出了选择之后判断才能够准确。

// 判断权限是否处于不再询问状态
if(ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_DENIED){if(!ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_PHONE_STATE)){Toast.makeText(this, "该权限已被用户选择了不再询问!", Toast.LENGTH_SHORT).show();}else{Toast.makeText(this, "权限未被授予!", Toast.LENGTH_SHORT).show();}
}else{Toast.makeText(this, "权限已被授予!", Toast.LENGTH_SHORT).show();
}

2、创建 AlertDialog 对话框

使用 AlertDialog.Builder 构造器来创建一个对话框对象,然后再使用 setTitle、setMessage 等方法构造对话框的标题及信息等。

// 创建一个对话框
AlertDialog alertDialog = new AlertDialog.Builder(this).setTitle("权限设置") // 设置标题.setMessage("应用缺乏必要的权限,是否前往手动授予该权限?") // 设置内容// 添加一个确认按钮并设置点击按钮后执行的代码.setPositiveButton("前往", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// 点击按钮后执行的代码...}}).setNegativeButton("取消", null) // 添加一个取消按钮,无命令执行.create(); // 创建对话框
alertDialog.show(); // 显示对话框

3、跳转权限设置页面

使用 Intent 和 startActivity() 等方法跳转到当前应用的详情页面进行权限设置。

// 跳转至当前应用的详情页面
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)

这篇关于Android请求权限之不再询问或禁止不再提示的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/562284

相关文章

电脑提示xlstat4.dll丢失怎么修复? xlstat4.dll文件丢失处理办法

《电脑提示xlstat4.dll丢失怎么修复?xlstat4.dll文件丢失处理办法》长时间使用电脑,大家多少都会遇到类似dll文件丢失的情况,不过,解决这一问题其实并不复杂,下面我们就来看看xls... 在Windows操作系统中,xlstat4.dll是一个重要的动态链接库文件,通常用于支持各种应用程序

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1

电脑提示Winmm.dll缺失怎么办? Winmm.dll文件丢失的多种修复技巧

《电脑提示Winmm.dll缺失怎么办?Winmm.dll文件丢失的多种修复技巧》有时电脑会出现无法启动程序,因为计算机中丢失winmm.dll的情况,其实,winmm.dll丢失是一个比较常见的问... 在大部分情况下出现我们运行或安装软件,游戏出现提示丢失某些DLL文件或OCX文件的原因可能是原始安装包

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四

Spring Boot Controller处理HTTP请求体的方法

《SpringBootController处理HTTP请求体的方法》SpringBoot提供了强大的机制来处理不同Content-Type​的HTTP请求体,这主要依赖于HttpMessageCo... 目录一、核心机制:HttpMessageConverter​二、按Content-Type​处理详解1.

Android与iOS设备MAC地址生成原理及Java实现详解

《Android与iOS设备MAC地址生成原理及Java实现详解》在无线网络通信中,MAC(MediaAccessControl)地址是设备的唯一网络标识符,本文主要介绍了Android与iOS设备M... 目录引言1. MAC地址基础1.1 MAC地址的组成1.2 MAC地址的分类2. android与I

一文详解如何在Vue3中封装API请求

《一文详解如何在Vue3中封装API请求》在现代前端开发中,API请求是不可避免的一部分,尤其是与后端交互时,下面我们来看看如何在Vue3项目中封装API请求,让你在实现功能时更加高效吧... 目录为什么要封装API请求1. vue 3项目结构2. 安装axIOS3. 创建API封装模块4. 封装API请求