Android自定义权限permission

2023-10-27

http://www.tuicool.com/articles/BZZrimu

ndroid是一种特权分隔的操作系统,在Android上运行的每个应用程序都具有各自独立的系统标识(Linux用户ID和组ID)。系统各部分有不同的身份标识。因此,Linux上运行的各个应用程序相互独立且与系统无关。

Android的“权限许可”机制通过限定特定的进程能够执行的指定操作和限定对每一个资源点对点的访问的URI许可来提供附加细粒度的安全功能。

    由于内核让每个应用程序运行在独立的沙盒中,应用程序必须通过声明所需要而沙盒没有提供的权限来明确的分配资源和数据。Android没有采用会使用户体验复杂并且不利于安全的动态授权机制。应用程序静态的声明他们所需要的权限,在程序安装时Android系统会提示用户同意它们获取这些权限。

Android权限模型是基于如下两个目标而设计的:

通过列出应用程序可能执行的所有敏感的操作,让用户更多地意识到安装这个应用存在的潜在风险。这假定用户会阅读在安装时弹出的权限列表,并基于这些信息来作出是否安装应用的决定。

降低风险:

通过限制应用程序访问Android系统敏感的API接口,来降低应用程序对整个系统带来的伤害(比如病毒)。

   

Android权限被分为四个等级:

普通级:

这些权限并不能真正伤害到用户(比如更换壁纸),当程序需要这些权限是,开发者不需要指定程序会自动赋予这些权限。

危险级:

这些权限可能会带来真的伤害(比如打电话,打开网络链接等),如果要使用它们需要开发者在AndroidManifest.xml中声明对应的权限。

签名级:

如果应用使用的是相同的签名证书时,这些权限会自动授予给声明或者创建这些权限的程序。设计这一层级权限的目的是方便组件间数据共享。

签名/系统级:

    和签名级一样,例外的是系统镜像是自动获取这些权限的,这一层级是专为设备制造商设计的。

    在开发Android应用程序的过程中,如果我们要使用系统的某些服务(比如网络、待机、读写文件权限等)都需要首先像下面这样在AndroidManifest.xml中声明对应的权限,然后才可以在代码中访问这些服务:

<!-- 文件读写权限 -->
	<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
	<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
	<uses-permission android:name="android.permission.WRITE_SETTINGS" />

	<!-- 访问网络的权限 -->
	<uses-permission android:name="android.permission.INTERNET" />
	<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
	<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
	<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
	
	<!-- 屏幕唤醒权限 -->
	<uses-permission android:name="android.permission.WAKE_LOCK" />
	<uses-permission android:name="android.permission.DEVICE_POWER" />
    同样,除了能够使用Android系统提供的各种权限外,我们还可以自定义权限来限制其它程序访问应用的各种服务或者组件。任何程序想要和此程序的组件交互时,都需要声明相应的权限时才能成功地访问。

自定义权限步骤如下:

以为一个服务CalledService定义访问权限为例,具体步骤如下:

1、在被调用程序Called的AndroidManifest.xml文件中作如下定义:

<!-- Service Permission -->
	<permission
		android:name="com.uperone.permission.SERVICE"
		android:label="@string/app_name"
		android:permissionGroup="@string/app_name"
		android:protectionLevel="normal" >
	</permission>
关于各标签属性的意义自行脑补,都是见名知意。
<service
	android:name="com.uperone.called.service.CalledService"
	android:permission="com.uperone.permission.SERVICE">
	<intent-filter>
	    <action android:name="com.uperone.action.SERVICE" />
	    <category android:name="android.intent.category.DEFAULT"/>
	</intent-filter>
        </service>
2、 在需要调用该组件的应用程序Call工程的AndroidManifest.mxl文件中声明对应的权限:
<uses-permission android:name="com.uperone.permission.SERVICE" />
3、在需要调用该组件的应用程序Call工程中启动、停止改服务:
case R.id.startServiceBtnId:{
			Intent intent = new Intent( "com.uperone.action.SERVICE" );
			startService(intent);
		}
		break;
特别注意: 如果在调用需要权限的组件时没有在Manifest.xml中声明权限,则会在运行对应代码段时报异常!!!!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android自定义权限permission 的相关文章

  • 什么是数据仓库?数据仓库的特点与架构演进

    1 为什么需要数据仓库 在没有数仓之前我们做数据分析到报表展示 依赖的都是从业务数据库中取数据来做分析 业务数据库主要是为业务操作服务 虽然可以用于分析 但需要做很多额外的调整 会存在以下几个问题 表结构关联关系错综复杂 业务数据库通常是根
  • js七牛云下载视频、音频、pdf、图片

    近期碰到一个需求 浏览器下载视频 音频等附件 原生组件video audio倒是支持下载 但是别的类型不行 而且无法通过下载按钮进行 常规下载思路使用a标签download属性下载附件 但是浏览器兼容性不好 而且针对视频 音频 pdf等浏览
  • C# 下载服务器的文件

    C 下载服务器的文件方法 带下载进度条 来源 C 下载文件并显示显示进度的方法实现 光脚丫思考的专栏 CSDN博客 float percent 0 try System Net HttpWebRequest Myrq System Net
  • C语言练习:通讯录

    通讯录代码 本文介绍如何使用C语言实现一个通讯录的功能 1 通讯录能存放1000个人的信息 每个人信息包含名字 年龄 性别 电话 地址 2 增加人的信息 3 删除指定人信息 4 查找指定人的信息 5 修改指定人的信息 通讯录包含三个部分 头
  • JS插件:粒子动画

    1 canvas nest js 配置参数 2 particle js 安装导入 特定参数项 配置参数 JSON格式 3 Particleground js 安装导入 配置参数 1 canvas nest js 轻量 只有1 6 kb 只能
  • C++中vector用法

    vector 向量 C 中的一种数据结构 确切的说是一个类 它相当于一个动态的数组 当程序员无法知道自己需要的数组的规模多大时 用其来解决问题可以达到最大节约空间的目的 用法 1 文件包含 首先在程序开头处加上 include以包含所需要的
  • memcached for Windows

    http www splinedancer com memcached win32 http code jellycan com memcached memcached 1 2 6 The original is the version f
  • 蓝桥杯Python->冒泡,插入,希尔 and 三种快速排序>货物摆放练习练习

    作者 芝士小熊饼干 系列专栏 数据结构 蓝桥杯 算法 坚持天数 4天 排序 交换 def Swap arr i j arr i arr j arr j arr i 冒泡排序 def BubbleSort arr n len arr for
  • Java 之访问控制权限(public,private,protected,default)详解

    class之间的关系做一个简单的定义 对于继承自己的class 可以认为他们都是自己的子女 而对于和自己一个目录下的classes 认为都是自己的朋友 继承自己的class 子女 本包中的class 朋友 public 公开 可以被所有其他
  • Fiddler抓包工具笔记

    一 简介 Fiddler代理相当于中介的角色 快捷键Shift F5去缓存刷新 二 抓包 1 设置过滤器 没有设置过滤器的话 会抓所有的包 非常乱会混淆 隐藏包含这些内容的URL 2 快速定位到需要的包 点击 Webforms菜单 界面分析
  • c++如何的倒计时如何停止并退出_合伙人退出时,该如何确定退出价格?

    这个问题问得特别好 相信这不单单只有题主有这方面的困惑 任何处于创业初期的合伙人们都会遇到合伙人的问题 今天接着这个提问 我们就来好好聊聊合伙人 希望会对各位创业者们有所启发 当然 如果你有企业经营方面的问题 也可以在线向我提问 一 哪些人

随机推荐

  • SaltStack installation & configuration

    四大功能 远程执行 配置管理 云管理 事件驱动 安装 https www cnblogs com xintiao p 10380656 html wget O etc yum repos d CentOS Base repo http mi
  • 信号量的实现和应用(一)

    生产者 消费者问题 从一个实际的问题 生产者和消费者出发 谈一谈为什么需要信号量 信号量用来做什么 问题描述 现在存在一个文件 buffer txt 作为一个共享缓存区 缓冲区同时最多只能保存10个数 现在一个生产者进程 依次向缓冲区写入整
  • 解决VSCode中python输出中文乱码的问题

    问题描述 在用python的print的时候 输出的中文出现乱码 解决方法 找到VSCode的用户配置文件 按下CTRL SHIF P 出现搜索框 在搜索框中输入 open user setting 然后就可以找到用户配置文件 json 打
  • 蓝桥杯算法训练VIP-方格取数

    题目 题目链接 题解 动态规划 本题和这个题几乎是完全一样 那个博客写的巨清楚 所以这里不写了 代码 include
  • Redis的Jedis连接池

    Jedis本身是线程不安全的 并且频繁的创建和销毁连接会有性能损耗 因此我们推荐大家使用Jedis连接池代替Jedis的直连方式 public class JedisConnectionFactory private static fina
  • BDD100K数据集下载和标签格式转换问题

    BDD100K数据集下载和标签格式转换问题 数据集介绍 加州大学伯克利分校的Berkeley DeepDrive数据集由超过100K的视频序列组成 包含各种各样的注释 包括图像级标记 对象边界框 可行驶区域 车道标记和全帧实例分割 数据集具
  • python中解决import matplotlib.pyplot as plt 出现报错:OSError: [WinError 193] %1 不是有效的 Win32 应用程序

    先上代码 import matplotlib pyplot as plt squares 1 4 9 16 25 fig ax plt subplots ax plot squares plt show 在pycharm运行出现报错 而在s
  • 时间序列预测——时序卷积网络(TCN)

    本文展示了使用时序卷积网络 TCN 进行时间序列预测的全过程 包含详细的注释 整个过程主要包括 数据导入 数据清洗 结构转化 建立TCN模型 训练模型 包括动态调整学习率和earlystopping的设置 预测 结果展示 误差评估等完整的时
  • 终于支持 markdown 格式了

    print Hello MD
  • Pytorch虚拟环境搭建、训练unet、vit、yolov3

    一 搭建虚拟环境 手把手教你在win10下搭建pytorch GPU环境 Anaconda Pycharm 老潇的摸鱼日记 博客园 cnblogs com https www cnblogs com victorxiao p 1351225
  • 华为奇葩面试题登上热搜!「一头牛重800公斤一座桥承重700公斤,请问牛怎么过桥?」

    今日 知乎上有一道华为公司面试题 一头牛重800公斤一座桥承重700公斤问牛怎么过桥 目前这个话题已经登上了知乎热搜第三 这个问题到底是互联网大厂奇葩亦或是常规操作 这到底是道德的沦丧还是 下面就一起来看看神通广大的知乎热心网友是怎么解答的
  • 【基于python实现UI自动化】1.0 selenium工具介绍

    基于python实现UI自动化 1 0 selenium工具介绍 Selenium介绍 Selenium的发展 Selenium 1 Selenium 2 Selenium 3 Selenium 4 Selenium介绍 Selenium是
  • 【STM32WLE5之LoRa# 系列2、易智联LM401 评估板PingPong工程移植】

    STM32WLE5之LoRa 系列2 易智联LM401 评估板PingPong工程移植 前言 一 开发环境 1 STM32CubeMX与STM32CubeIDE软件安装 2 下载STM32WL固件库 二 硬件平台 三 PingPong例程的
  • 工厂模式(创建型)

    工厂模式有 简单工厂模式 工厂方法模式 抽象工厂模式 简单工厂模式 简单工厂模式的方法为 通过一个工厂 工厂里面有一个创建的函数 通过输入type 通过switch的匹配 匹配成功的话 创建相应的产品 没有的话 返回nullptr 具体的结
  • Spring cache

    文章目录 Spring cache 简单使用 注解缓存 Cacheable 键生成器 自定义的键生成器 带条件的缓存 CachePut CacheEvict Caching CacheConfig 使用Spel表达式 使用xml配置缓存 以
  • win10如何添加开机自己启动软件

    win10添加开机自启动软件的方法 Win10添加自动运行软件的方法 打开C Users 用户 AppData Roaming Microsoft Windows Start Menu Programs Startup 注意此处的用户是具体
  • 趣链科技解读区块链技术及其产业应用

    陀螺公开课 是定位于区块链行业的线上精品教育课程 以视频的形式传递行业思考 内容板块包括技术前沿 产业案例 领袖视野 学术思想 名人演讲等 通过邀请行业领域专家线上讲课 及开放高质量视频投稿 为用户提供优质的区块链学习内容 陀螺公开课第二期
  • linux-bash基础特性-通配符

    globbing 通配符 文件名通配 整体文件名匹配 而非部分 匹配模式 元字符 匹配任意长度的任意字符 ab ab开头的单词 ab 包含ab的单词 ab ab结尾的单词 a b 包含a b的单词 匹配任意单个字符 ab ab开头的三个字符
  • Ubuntu Linux操作系统

    Ubuntu Linux操作系统 Ubuntu是一个Linux发行版的操作系统软件 这意味着它运行在使用Linux的应用程序 内核和库 Ubuntu的开发和由Canonical公司 即成立由马克 沙特尔沃思资助的南非公司赞助 的Ubuntu
  • Android自定义权限permission

    http www tuicool com articles BZZrimu ndroid是一种特权分隔的操作系统 在Android上运行的每个应用程序都具有各自独立的系统标识 Linux用户ID和组ID 系统各部分有不同的身份标识 因此 L