对于6.0以下的权限及在安装的时候,根据权限声明产生一个权限列表,用户只有在同意之后才能完成app的安装,造成了我们想要使用某个app,就要默默忍受其一些不必要的权限(比如是个app都要访问通讯录、短信等)。而在6.0以后,我们可以直接安装,当app需要我们授予不恰当的权限的时候,我们可以予以拒绝(比如:单机的象棋对战,请求访问任何权限,我都是不同意的)。当然你也可以在设置界面对每个app的权限进行查看,以及对单个权限进行授权或者解除授权。
新的权限机制更好的保护了用户的隐私,Google将权限分为两类,一类是Normal Permissions,这类权限一般不涉及用户隐私,是不需要用户进行授权的,比如手机震动、访问网络等;另一类是Dangerous Permission,一般是涉及到用户隐私的,需要用户进行授权,比如读取sdcard、访问通讯录等。
Normal Permissions如下:
<code class="hljs autohotkey has-numbering">ACCESS_LOCATION_EXTR<span class="hljs-built_in">A_COMMANDS</span>
ACCESS_NETWORK_STATE
ACCESS_NOTIFICATION_POLICY
ACCESS_WIFI_STATE
BLUETOOTH
BLUETOOTH_ADMIN
BROADCAST_STICKY
CHANGE_NETWORK_STATE
CHANGE_WIFI_MULTICAST_STATE
CHANGE_WIFI_STATE
DISABLE_KEYGUARD
EXPAND_STATUS_BAR
GET_PACKAGE_SIZE
INSTALL_SHORTCUT
INTERNET
KILL_BACKGROUND_PROCESSES
MODIFY_AUDIO_SETTINGS
NFC
READ_SYNC_SETTINGS
READ_SYNC_STATS
RECEIVE_BOOT_COMPLETED
REORDER_TASKS
REQUEST_INSTALL_PACKAGES
SET_ALARM
SET_TIME_ZONE
SET_WALLPAPER
SET_WALLPAPER_HINTS
TRANSMIT_IR
UNINSTALL_SHORTCUT
USE_FINGERPRINT
VIBRATE
WAKE_LOCK
WRITE_SYNC_SETTINGS</code>Dangerous Permissions:
<span style="font-size:14px;"><code class="hljs avrasm has-numbering"><span class="hljs-label">group:</span>android<span class="hljs-preprocessor">.permission</span>-group<span class="hljs-preprocessor">.CONTACTS</span>
permission:android<span class="hljs-preprocessor">.permission</span><span class="hljs-preprocessor">.WRITE</span>_CONTACTS
permission:android<span class="hljs-preprocessor">.permission</span><span class="hljs-preprocessor">.GET</span>_ACCOUNTS
permission:android<span class="hljs-preprocessor">.permission</span><span class="hljs-preprocessor">.READ</span>_CONTACTS
<span class="hljs-label">group:</span>android<span class="hljs-preprocessor">.permission</span>-group<span class="hljs-preprocessor">.PHONE</span>
permission:android<span class="hljs-preprocessor">.permission</span><span class="hljs-preprocessor">.READ</span>_CALL_LOG
permission:android<span class="hljs-preprocessor">.permission</span><span class="hljs-preprocessor">.READ</span>_PHONE_STATE
permission:android<span class="hljs-preprocessor">.permission</span><span class="hljs-preprocessor">.CALL</span>_PHONE
permission:android<span class="hljs-preprocessor">.permission</span><span class="hljs-preprocessor">.WRITE</span>_CALL_LOG
permission:android<span class="hljs-preprocessor">.permission</span><span class="hljs-preprocessor">.USE</span>_SIP
permission:android<span class="hljs-preprocessor">.permission</span><span class="hljs-preprocessor">.PROCESS</span>_OUTGOING_CALLS
permission:<span class="hljs-keyword">com</span><span class="hljs-preprocessor">.android</span><span class="hljs-preprocessor">.voicemail</span><span class="hljs-preprocessor">.permission</span><span class="hljs-preprocessor">.ADD</span>_VOICEMAIL
<span class="hljs-label">group:</span>android<span class="hljs-preprocessor">.permission</span>-group<span class="hljs-preprocessor">.CALENDAR</span>
permission:android<span class="hljs-preprocessor">.permission</span><span class="hljs-preprocessor">.READ</span>_CALENDAR
permission:android<span class="hljs-preprocessor">.permission</span><span class="hljs-preprocessor">.WRITE</span>_CALENDAR
<span class="hljs-label">group:</span>android<span class="hljs-preprocessor">.permission</span>-group<span class="hljs-preprocessor">.CAMERA</span>
permission:android<span class="hljs-preprocessor">.permission</span><span class="hljs-preprocessor">.CAMERA</span>
<span class="hljs-label">group:</span>android<span class="hljs-preprocessor">.permission</span>-group<span class="hljs-preprocessor">.SENSORS</span>
permission:android<span class="hljs-preprocessor">.permission</span><span class="hljs-preprocessor">.BODY</span>_SENSORS
<span class="hljs-label">group:</span>android<span class="hljs-preprocessor">.permission</span>-group<span class="hljs-preprocessor">.LOCATION</span>
permission:android<span class="hljs-preprocessor">.permission</span><span class="hljs-preprocessor">.ACCESS</span>_FINE_LOCATION
permission:android<span class="hljs-preprocessor">.permission</span><span class="hljs-preprocessor">.ACCESS</span>_COARSE_LOCATION
<span class="hljs-label">group:</span>android<span class="hljs-preprocessor">.permission</span>-group<span class="hljs-preprocessor">.STORAGE</span>
permission:android<span class="hljs-preprocessor">.permission</span><span class="hljs-preprocessor">.READ</span>_EXTERNAL_STORAGE
permission:android<span class="hljs-preprocessor">.permission</span><span class="hljs-preprocessor">.WRITE</span>_EXTERNAL_STORAGE
<span class="hljs-label">group:</span>android<span class="hljs-preprocessor">.permission</span>-group<span class="hljs-preprocessor">.MICROPHONE</span>
permission:android<span class="hljs-preprocessor">.permission</span><span class="hljs-preprocessor">.RECORD</span>_AUDIO
<span class="hljs-label">group:</span>android<span class="hljs-preprocessor">.permission</span>-group<span class="hljs-preprocessor">.SMS</span>
permission:android<span class="hljs-preprocessor">.permission</span><span class="hljs-preprocessor">.READ</span>_SMS
permission:android<span class="hljs-preprocessor">.permission</span><span class="hljs-preprocessor">.RECEIVE</span>_WAP_PUSH
permission:android<span class="hljs-preprocessor">.permission</span><span class="hljs-preprocessor">.RECEIVE</span>_MMS
permission:android<span class="hljs-preprocessor">.permission</span><span class="hljs-preprocessor">.RECEIVE</span>_SMS
permission:android<span class="hljs-preprocessor">.permission</span><span class="hljs-preprocessor">.SEND</span>_SMS
permission:android<span class="hljs-preprocessor">.permission</span><span class="hljs-preprocessor">.READ</span>_CELL_BROADCASTS</code></span>
可以通过adb shell pm list permissions -d -g
进行查看。
看到上面的dangerous permissions,会发现一个问题,好像危险权限都是一组一组的,恩,没错,的确是这样的,
那么有个问题:分组对我们的权限机制有什么影响吗?
的确是有影响的,如果app运行在Android 6.x的机器上,对于授权机制是这样的。如果你申请某个危险的权限,假设你的app早已被用户授权了同一组的某个危险权限,那么系统会立即授权,而不需要用户去点击授权。比如你的app对READ_CONTACTS
已经授权了,当你的app申请WRITE_CONTACTS
时,系统会直接授权通过。此外,对于申请时弹出的dialog上面的文本说明也是对整个权限组的说明,而不是单个权限(ps:这个dialog是不能进行定制的)。
不过需要注意的是,不要对权限组过多的依赖,尽可能对每个危险权限都进行正常流程的申请,因为在后期的版本中这个权限组可能会产生变化。