【android开发-18】android中运行时申请权限详解

1,android权限机制

在Android中,权限机制是一种保护用户隐私和数据安全的重要机制。它允许应用程序在访问敏感或危险的数据或资源时获取特定的权限。以下是Android中权限机制的详细解释:

1,权限类别:Android将权限分为两种类别:正常权限和危险权限。正常权限是对应用程序运行所需的基本功能或数据的访问,例如读取外部存储或访问网络。这些权限通常在应用程序的manifest文件中声明,并在安装时由用户授予。危险权限涉及对用户隐私或系统资源的潜在风险,例如读取联系人或访问摄像头。这些权限通常需要用户显式授予,并可能需要在运行时请求。

2,权限声明:应用程序在它的manifest文件中声明所需权限。这些声明包括权限的名称和保护级别。保护级别表示权限的敏感性和危险性。例如,保护级别为"普通"的权限可以在安装时自动授予,而保护级别为"危险"的权限需要用户显式授予。

在Android中,权限声明通常在应用程序的AndroidManifest.xml文件中进行。以下是一个示例,展示了如何在AndroidManifest.xml文件中声明所需的权限:

<?xml version="1.0" encoding="utf-8"?>  
<manifest xmlns:android="http://schemas.android.com/apk/res/android"  package="com.example.myapp">  <!-- 声明所需的权限 -->  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  <uses-permission android:name="android.permission.CAMERA" />  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />  <!-- 其他声明 -->  <application  android:allowBackup="true"  android:icon="@mipmap/ic_launcher"  android:label="@string/app_name"  android:roundIcon="@mipmap/ic_launcher_round"  android:supportsRtl="true"  android:theme="@style/AppTheme">  <!-- 其他代码 -->  </application>  </manifest>

在上述示例中,我们声明了四个权限:READ_EXTERNAL_STORAGE、WRITE_EXTERNAL_STORAGE、CAMERA和ACCESS_FINE_LOCATION。每个权限都由元素表示。在实际应用中,你可能需要根据自己的需求来声明相应的权限。请注意,只有正常权限可以在应用程序的manifest文件中声明并在安装时自动授予。危险权限需要在运行时请求

3,权限请求和授权:应用程序可以在运行时请求危险权限。为了请求权限,应用程序需要使用Android的Permission API来请求特定的权限。当应用程序请求危险权限时,系统会显示一个对话框,提示用户授予权限。如果用户授予权限,应用程序将能够继续执行需要该权限的操作。如果用户拒绝权限,应用程序将无法执行这些操作。

下表中列出了android中所有的危险权限,一共9组24个权限:
在这里插入图片描述
如果属于这张表中的权限,那么就需要运行时权限处理,如果不在这张表中,那么只需要在androidmenifest.xml中添加一下权限声明就可以了。

4,权限管理和撤销:Android系统提供了权限管理功能,允许用户查看和管理应用程序的权限。用户可以在设置应用程序的权限设置中查看和更改应用程序的权限。此外,应用程序也可以在自己的代码中使用Permission API来检查和管理它自己的权限状态。

5,权限升级和降级:如果应用程序需要访问更敏感或危险的数据或资源,它可能需要升级到更高的权限级别。同样地,如果应用程序不再需要访问某些数据或资源,它可能需要降级到更低的权限级别。这些升级和降级可以在应用程序的manifest文件中声明,并在安装时由系统处理。

总之,Android的权限机制允许应用程序在访问敏感或危险的数据或资源时获取特定的权限,同时保护用户的隐私和数据安全。应用程序需要在manifest文件中声明所需的权限,并在运行时请求危险权限。用户可以管理和更改应用程序的权限,以确保其隐私和安全需求得到满足。

2,程序运行时申请权限

在Android中,如果需要在运行时请求权限,可以使用ActivityCompat.requestPermissions()方法。以下是一个示例代码,展示了如何在运行时请求危险权限

import androidx.core.content.ContextCompat;  
import androidx.core.app.ActivityCompat;  
import android.Manifest;  
import android.content.pm.PackageManager;  
import android.os.Bundle;  
import android.support.v4.app.ActivityCompat.PermissionResult;  
import android.support.v7.app.AppCompatActivity;  public class MainActivity extends AppCompatActivity {  private static final int REQUEST_CODE_PERMISSION = 1001;  @Override  protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  // 检查所需权限是否已授权  if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {  // 权限未授权,请求权限  ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, REQUEST_CODE_PERMISSION);  } else {  // 权限已授权,执行相应操作  // ...  }  }  @Override  public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {  super.onRequestPermissionsResult(requestCode, permissions, grantResults);  if (requestCode == REQUEST_CODE_PERMISSION) {  if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {  // 权限被授予,执行相应操作  // ...  } else {  // 权限被拒绝,根据需求处理  // ...  }  }  }  
}

在上述示例中,我们首先检查应用程序是否已获得CAMERA权限。如果未获得权限,我们调用ActivityCompat.requestPermissions()方法来请求该权限。该方法接受三个参数:当前活动、所需的权限数组和一个请求代码。在onRequestPermissionsResult()方法中,我们检查是否为所需的权限请求,并根据授予结果执行相应的操作。

注意:调用完了requestPermissions方法之后,系统会弹出一个权限申请的对话框,然后用户选择同意或者拒绝,不论哪种结果,最终都会回调onRequestPermissionsResult方法,而授权的结果封装在grantResults参数中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/257651.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VSCODE 运行C程序缓慢解决方法之一

最近更换了mingw的版本&#xff0c;安装路径与之前的mingw路径不大一样。结果发现代码运行的时候很慢&#xff0c;弹出窗口后&#xff0c;迟迟没有打印任何东西&#xff0c;就像卡死了一样。试过网上说的一堆方法&#xff0c;没有什么用。 我按照以下流程进行检查: 1.检查min…

使用hexo搭建博客

使用Hexo博客框架搭建博客 一&#xff0c;前言二&#xff0c;安装配置1&#xff0c;安装node.js下载安装配置全局环境 2&#xff0c;安装git环境3&#xff0c;注册github4&#xff0c;安装git5&#xff0c;将 git 与 GitHub 账号绑定配置ssh 6&#xff0c;安装Hexo&#xff08;…

基于OpenCV+CNN+IOT+微信小程序智能果实采摘指导系统——深度学习算法应用(含pytho、JS工程源码)+数据集+模型(五)

目录 前言总体设计系统整体结构图系统流程图 运行环境Python环境TensorFlow 环境Jupyter Notebook环境Pycharm 环境微信开发者工具OneNET云平台 模块实现1. 数据预处理2. 创建模型并编译3. 模型训练及保存4. 上传结果5. 小程序开发1&#xff09;查询图片2&#xff09;查询识别结…

webpack该如何打包

1.我们先创建一个空的大文件夹 2.打开该文件夹的终端 输入npm init -y 2.1.打开该文件夹的终端 2.2在该终端运行 npm init -y 3.安装webpack 3.1打开webpack网址 点击“中文文档” 3.2点击“指南”在点击“起步” 3.3复制基本安装图片画线的代码 4.在一开始的文件夹下在创建一…

Nacos未授权访问

漏洞描述 Nacos 是阿里巴巴推出来的一个新开源项目&#xff0c;是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。致力于帮助发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集&#xff0c;可以快速实现动态服务发现、服务配置、服务元数据及流量管…

教你如何打造自己的知识付费平台!

一、确定目标群体 首先&#xff0c;你需要明确你的知识付费平台的目标用户是谁。这将帮助你确定所需的内容和功能&#xff0c;以及如何吸引和留住这些用户。例如&#xff0c;如果你的目标群体是职场新人&#xff0c;你的平台可能需要提供职场技能、职业规划、面试技巧等方面的…

如何快速构建知识服务平台,打造个人或企业私域流量

随着互联网的快速发展&#xff0c;传统的知识付费平台已经不能满足用户的需求。而SaaS知识付费小程序平台则是一种新型的知识付费方式&#xff0c;具有灵活、便捷、高效等特点&#xff0c;为用户提供了更加优质的付费知识服务。本文将介绍如何搭建自己的SaaS知识付费小程序平台…

系统设计-微服务架构

典型的微服务架构图 下图展示了一个典型的微服务架构。 负载均衡器&#xff1a;它将传入流量分配到多个后端服务。CDN&#xff08;内容交付网络&#xff09;&#xff1a;CDN 是一组地理上分布的服务器&#xff0c;用于保存静态内容以实现更快的交付。客户端首先在 CDN 中查找内…

鸿蒙OS应用开发之最简单的程序

鸿蒙OS应用开发之最简单的程序 前面介绍怎么样安装鸿蒙应用开发的环境&#xff0c;然后试着运行起来&#xff0c;并安装运行的虚拟机&#xff0c;以及对应9.0版本的API和SDK等软件。这样就具备了基本的开发基础&#xff0c;就可以进入创建应用程序开发了。 在我们起飞之前&…

家电制造数字孪生5G智能工厂可视化系统,加速家电制造产业数字化转型

5G数字孪生、三维可视化与工业互联网的融合加速中国新型工业化进程&#xff0c;助推我国从制造大国迈进制造强国。家电行业是中国最具国际竞争力的产业之一&#xff0c;在企业数字化转型中&#xff0c;要求企业从生产设备到数字化系统&#xff0c;一系列的数字化、智能化改革已…

鲁大师电动车智能化测评报告第二十四期:RideyFUN!上线,九号猎户座858分刷新电自榜单

鲁大师第二十四期智能化电动车测评排行榜数据来源于鲁大师智慧实验室&#xff0c;测评的车型均为市面上主流品牌的主流车型。截止目前&#xff0c;鲁大师智能化电动车测评的车型高达140余台&#xff0c;且还在不断增加和丰富中。 1、 测评依据 鲁大师电动车智能化测评体系包含车…

imutils库介绍及安装学习

目录 本机环境 安装 函数及属性 列举imutils库信息 属性和函数介绍及使用 属性 常用函数 方法使用 图像平移 图像缩放 图像旋转 骨架提取 通道转换 OPenCV版本的检测 综合测试 介绍 imutils 是一个用于图像处理和计算机视觉任务的 Python 工具包。它提供了一系…