IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android权限问题 -> 正文阅读

[移动开发]Android权限问题

Android权限问题总结

Android 权限分为安装时权限运行时权限特殊权限

安装时权限

安装时权限时是指在AndroidMainfest中申请的,安装后就会自动授予的权限。不需要主动申请。应用商店查看的应用详情中使用的权限一般显示的也是安装时权限。安装时权限又分为:普通权限(protectlevel:normal) 和 ==签名权限(protectlevel:signature)==两种。

  • 普通权限:ACCESS_NETWORK_STATEACCESS_WIFI_STATE 等。
  • 签名权限:当应用声明了其他应用已定义的签名权限时,如果两个应用使用同一证书进行签名,系统会在安装时向前者授予该权限。否则,系统无法向前者授予该权限。
app互相调用
  • 假如有APP A,其AndroidManifest的某个Activity launchActivity的 **android:exported = true **的时候就可以从另一个App B中调用打开launchActivity。
Intent intent = new Inetnt();
intent.SetClassName("包名","Activity名");
startActivity(intent);
  • 这样会导致任意一个APP 都可以调用,引起安全问题。现在,我们想让只有某些APP才能调用打开。
    -自定义Permission
    Android 可以自定义Permission,格式如下:
<permission
        android:name="com.self.test"
        android:protectionLevel="normal" />
  • 在A app的Androidmainfest中声明了一个permission:com.self.test,保护级别设置为normal。在Activity的属性里设置android:permission。它表示申请了权限com.self.test的应用才能启动这个Activity。
<activity
            android:name=".LaunchActivity"
            android:permission="com.self.test"
            android:exported="true" />

当在另一个app中没有申请权限com.self.test的时候,启动LaunchActivity会报错,1如下:

Caused by: java.lang.SecurityException: Permission Denial: starting Intent { cmp=com.example.myapplication/.LaunchActivity } from ProcessRecord{2dd4083 13617:com.example.test/u0a148} (pid=13617, uid=10148) requires com.self.test
        at android.os.Parcel.createExceptionOrNull(Parcel.java:2425)
        at android.os.Parcel.createException(Parcel.java:2409)

当在B中申请了com.self.test 就可以正常启动A的LaunchActivity。

  • 权限的保护级别
    上面我们看到,我们在A中声明的自定义权限的保护级别是normal,这时候会有这样的问题:
    1.当手机先安装B app的时候此时A还没有被安装,com.self.test 权限还没有被声明。后续如果继续安装A,在B中也无法获得com.self.test权限。因为B在申请com.self.test权限的时候,该权限还不存在,后续也不会继续申请。
    2.当将com.self.test的保护级别设置为signature或者signatureorsystem的时候,****如果A和B具有相同的签名(所有的系统化应用都具有相同的签名),则无论安装顺序先后,能够正常取得权限。不具有相同的签名,无论安顺序先后都无法使用权限。
    所以:: Android 权限保护级别为signature的,必须使用相同的签名,才能申请这个权限,不同的签名,根本申请不到。

运行时权限

运行时权限必须动态申请,protectLevel == dangerous。

特殊权限

特殊权限与特定的应用操作相对应。只有平台和原始设备制造商 (OEM) 可以定义特殊权限。此外,如果平台和 OEM 想要防止有人执行功能特别强大的操作(例如通过其他应用绘图),通常会定义特殊权限。
系统设置中的特殊应用访问权限页面包含一组用户可切换的操作。其中的许多操作都以特殊权限的形式实现。每项特殊权限都有自己的实现细节。如需查看使用每项特殊权限的说明。系统会为特殊权限分配“appop”保护级别。
如:

	SMS_FINANCIAL_TRANSACTIONS
	Added in API level 29
	Deprecated in API level 31
	
	public static final String SMS_FINANCIAL_TRANSACTIONS
	This constant was deprecated in API level 31.
	The API that used this permission is no longer functional.
	
	Allows financial apps to read filtered sms messages. Protection level: signature|appop
	
	Constant Value: "android.permission.SMS_FINANCIAL_TRANSACTIONS"

应用权限的请求示范可以查看Android官网:https://developer.android.google.cn/training/permissions/requesting

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-09-12 13:16:58  更:2021-09-12 13:17:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 17:02:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码