AndroidManifest配置之uses-permission

描述

uses-permission是AndroidManifest.xml中最经常使用的一项配置,它用来声明一个app在运行时所须要的权限。这里声 明的权限在应用安装时会提醒用户,用户能够选择赞成安装或拒绝安装。在Android6.0以前,若是用户赞成安装,即表示赞成app使用在 AndroidManifest.xml中声明的全部权限,在Android6.0以后,将应用的权限分红了两类,一类是Normal permissions, 一类是Dangerous permissions。对AndroidManifest.xml中声明的Normal permissions,和以前版本同样,用户赞成安装应用就会被授予这些权限。对AndroidManifest.xml中声明的Dangerous permissions,只表示应用须要用到这些权限,用户赞成安装并不会自动授予这类权限,当应用运行时用到这些权限时,须要在代码中申请权限,只有用 户赞成了,才会被授予。用户赞成后也能够随时在系统设置中取消对这类权限的受权。html

语法

<uses-permission android:name="string"
        android:maxSdkVersion="integer" />
  • 1
  • 2
  • 1
  • 2

所属节点

<manifest>
  • 1
  • 1

属性

Android:name
须要使用的权限的名字,能够是系统自带的权限,也能够是自定义的权限。Android系统提供了100多个权限,能够经过 https://developer.android.com/reference/android/Manifest.permission.html 查看这些权限的名字和含义。这些权限大多数名字都是以android.permission.为前缀,但也有一小部分是com.android.为前缀,须要注意区分。android

android:maxSdkVersion
表示须要此项权限的最高的系统API Levle,例如设置android:maxSdkVersion为21,它表示这项权限只在API Level 21(Android5.0)及如下的系统中须要使用。对API Level21以上的系统中不须要使用这项权限。浏览器

比较常见的一项和android:maxSdkVersion属性一块儿使用的是权限是 android.permission.WRITE_EXTERNAL_STORAGE。当一个app安装到系统后,Android系统会为其分配一块外 部存储空间供其使用(在应用中经过getExternalFilesDir()和getExternalCacheDir()得到),在Android 4.4 (API level 19)以前的系统中,要向这部分存储空间中写入文件,须要获取android.permission.WRITE_EXTERNAL_STORAGE权 限,可是从Android 4.4开始,对这部分存储空间的读写已经不须要任何权限了。因此,若是不须要读取这部分存储空间以外的其余外部存储文件,能够在 AndroidManifest.xml中这样来声明这个权限。app

<uses-permission
     android:name="android.permission.WRITE_EXTERNAL_STORAGE"
     android:maxSdkVersion="18" />
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

注意:
1. uses-permission中并无android:minSdkVersion这样的配置属性。
2. 在同一个AndroidManifest.xml中,容许有重复的uses-permission配置,也就是说容许android:name和 android:maxSdkVersion都相同的配置。可是不容许android:name相同,android:maxSdkVersion不一样的 配置。
例如,以下配置是容许的。google

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.INTERNET" />
  • 1
  • 2
  • 1
  • 2
<uses-permission
     android:name="android.permission.WRITE_EXTERNAL_STORAGE"
     android:maxSdkVersion="18" />
<uses-permission
     android:name="android.permission.WRITE_EXTERNAL_STORAGE"
     android:maxSdkVersion="18" />
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

以下配置则是不容许的spa

<uses-permission
     android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission
     android:name="android.permission.WRITE_EXTERNAL_STORAGE"
     android:maxSdkVersion="18" />
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5
<uses-permission
     android:name="android.permission.WRITE_EXTERNAL_STORAGE"
     android:maxSdkVersion="18" />
<uses-permission
     android:name="android.permission.WRITE_EXTERNAL_STORAGE"
     android:maxSdkVersion="19" />
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

对应用市场软件分发的影响

部分uses-permission的权限声明会影响应用市场的软件分发策略。例如一个应用在uses-permission中声明了CAMERA 权限,这意味着该应用须要使用摄像头才能够正常工做。若是一个设备上没有摄像头,那么当用户在该设备上经过 Google Play搜索或浏览应用时,就不会找到此应用。若是一个应用虽然须要用到摄像头,但并不是是必须的,没有摄像头大部分功能也能正常工做,那么就须要在 AndroidManifest.xml中添加CAMERA权限的同时,添加<uses-feature>声明。
有关Google Play的筛选策略参见 https://developer.android.com/google/play/filters.html.net

对应用市场审核的影响

app提交到各个应用市场后都会先通过一个审核的流程,只有审核经过的应用才能够发布。uses-permission声明的权限会影响应用是否能 够经过审核。不一样应用市场的审核标准不同,通常国内应用市场对应用权限的审核条件比较宽松,读取和修改通信录,收发短信,获取GPS位置信息,启用摄像 头这些权限在国内市场发布的应用中随处可见。而Google Play对应用权限的审核则很是严格, 任何超出应用自身功能范围的权限申请都没法经过。若是确实须要某项权限,能够提交必须使用该权限的说明,例如一个浏览器须要启用摄像头,一个输入法须要读 取通信录,这类权限申请必需要有充分合理的理由才可以审核经过。而包含像SYSTEM_ALERT_WINDOW,READ_LOGS这类系统级权限的应 用基本上没有可能经过Google Play的审核。因此国内APP在发布到Google Play以前须要去掉AndroidManifest全部没必要要的权限声明和相应的调用代码。code

相关文章
相关标签/搜索