对于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是不能进行定制的)。

不过需要注意的是,不要对权限组过多的依赖,尽可能对每个危险权限都进行正常流程的申请,因为在后期的版本中这个权限组可能会产生变化。