Android权限分类和详细介绍
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
本文参考了以下文章
Android权限详解权限整理_android 权限_wills777的博客-CSDN博客
Android系统中权限分为普通级别(Normal)危险级别(dangerous)签名级别(signature)和系统/签名级别(signature or system)。系统中所有预定义的权限根据作用的不同分别属于不同的级别。
对于普通(Normal)和危险级别(dangerous)的权限我们称之为低级权限应用申请即授予(在你的AndroidManifest.xml中使用一个或多个<permission> 标签声明Android6.0以后除了声明以外还需要手动申请用户在弹窗点击确认之后才能获取到该权限)。其他两级权限我们称之为高级权限或系统权限应用拥有platform级别的认证才能申请。当应用试图在没有权限的情况下做受限操作应用将被系统杀掉以警示。系统应用可以使用任何权限。权限的声明者可无条件使用该权限。
程序间访问权限大致分为两种
第一种低级点的permission的protectlevel属性为normal或者dangerous其调用者apk只需声明<uses-permission>即可拥有其permission。
第二种高级点的permission的protectlevel属性为signature或者signatureorsystem,其调用者apk就需要和被调用的apk一样拥有相同的signature
高级权限用有system级别权限设定的api时需要使其apk拥有system权限。比如在 android 的API中有供给SystemClock.setCurrentTimeMillis()函数来修改系统时间。有两个方法
第一个方法简单点不过需要在Android系统源码的情况下用make来编译
1. 在应用程序的AndroidManifest.xml中的manifest节点中插手android:sharedUserId="android.uid.system"这个属性。
2. 修改Android.mk文件插手LOCAL_CERTIFICATE := platform这一行
3. 使用mm命令来编译生成的apk就有修改系统时间的职权范围了
第2个方法麻烦点不外不消开虚拟机跑到源码情况下用make来编译
1. 同上插手android:sharedUserId="android.uid.system"这个属性。
2. 使用eclipse编译出apk文件但是这个apk文件是不能用的。
3. 使用针系统的platform密码钥匙来从头给apk文件签名。signapk platform.x509.pem platform.pk8 input.apk output.apk
小结
1、拥有signature的权限是否可以不用声明<uses-permission>就能access带normal或dangerous权限设定的数据或功能
只要signature相同就算不显式声明<ues-permission>也能access设定了normal或dangerous权限设定的数据或功能
2、若需要system级别权限使用系统api即使用system级别的签名如何同时使用其他signature权限设定即使用signature级别的签名的其他apk的功能
拥有system级别权限的使用者可以access其他普通signature权限声明设定过的功能。
所以设定为拥有system级别权限即可。
普通权限是指那些不会威胁到用户安全和隐私的权限这部分权限系统会自动帮我们进行授权不需要手动操作。
危险权限则表示那些可能会触及到用户安全隐私或者对设备安全造成影响的权限如获取手机联系人信息等权限申请者部分权限必须有用户收到点击授权才可以否则程序无法使用相应的功能。
下面列出 Android 中所有的危险权限一共是9组24个权限。
权限组名 | 权限名称 |
---|---|
CALENDAR日历 | READ_CALENDAR |
WRITE_CALENDAR | |
CAMERA相机 | CAMERA |
CONTACTS联系人 | READ_CONTACTS |
WRITE_CONTACTS | |
GET_ACCOUNTS | |
LOCATION位置 | ACCESS_FINE_LOCATION |
ACCESS_COARSE_LOCATION | |
MICROPHONE麦克风 | RECORD_AUDIO |
PHONE手机 | READ_PHONE_STATE |
CALL_PHONE | |
ERAD_CALL_LOG | |
WRITE_CALL_LOG | |
ADD_VOICEMAIL | |
USE_SIP | |
PROCESS_OUTGOING_CALLS | |
SENSORS传感器 | BODY_SENSORS |
SMS短信 | SEND_SMS |
RECEIVE_SMS | |
READ_SMS | |
RECEIVE_WAP_PUSH | |
RECEIVE_MMS | |
STORAGE存储卡 | READ_EXTERNAL_STORAGE |
WRITE_EXTERNAL_STORAGE |
这张表可以作为一个参照表每当使用一个权限的时可以先到这张表中来查看一下如果在属于这张表中的权限那么就需要进行运行时权限处理如果不在这张表中那么只需要在AndroidManifest.xml文件中添加一下权限声明就可以了。
另外需要注意表格中每个危险权限都属于一个权限组我们在进行运行时权限处理时使用的是权限名但是用户一旦同意授权了那么该权限所对应的权限组中所有其他的权限也会同时被授权。