而在6.0以后,我们可以直接安装,当app需要我们授予不恰当的权限的时候,我们可以予以拒绝
Google将权限分为两类,
一类是Normal Permissions,
另一类是Dangerous Permission
Normal Permissions如下
这类权限一般不涉及用户隐私,是不需要用户进行授权的
AndroidManifest.xml申请即可
> ACCESS_LOCATION_EXTRA_COMMANDS
> 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
Dangerous Permissions如下:
涉及到用户隐私的,需要用户进行授权
> group:android.permission-group.CONTACTS //联系人
> permission:android.permission.WRITE_CONTACTS
> permission:android.permission.GET_ACCOUNTS
> permission:android.permission.READ_CONTACTS
>
> group:android.permission-group.PHONE //
> permission:android.permission.READ_CALL_LOG
> permission:android.permission.READ_PHONE_STATE
> permission:android.permission.CALL_PHONE
> permission:android.permission.WRITE_CALL_LOG
> permission:android.permission.USE_SIP
> permission:android.permission.PROCESS_OUTGOING_CALLS
> permission:com.android.voicemail.permission.ADD_VOICEMAIL
>
> group:android.permission-group.CALENDAR
> permission:android.permission.READ_CALENDAR
> permission:android.permission.WRITE_CALENDAR
>
> group:android.permission-group.CAMERA
> permission:android.permission.CAMERA
>
> group:android.permission-group.SENSORS
> permission:android.permission.BODY_SENSORS
>
> group:android.permission-group.LOCATION
> permission:android.permission.ACCESS_FINE_LOCATION
> permission:android.permission.ACCESS_COARSE_LOCATION
>
> group:android.permission-group.STORAGE
> permission:android.permission.READ_EXTERNAL_STORAGE
> permission:android.permission.WRITE_EXTERNAL_STORAGE
>
> group:android.permission-group.MICROPHONE
> permission:android.permission.RECORD_AUDIO
>
> group:android.permission-group.SMS
> permission:android.permission.READ_SMS
> permission:android.permission.RECEIVE_WAP_PUSH
> permission:android.permission.RECEIVE_MMS
> permission:android.permission.RECEIVE_SMS
> permission:android.permission.SEND_SMS
> permission:android.permission.READ_CELL_BROADCASTS
可以通过adb shell pm list permissions -d -g进行查看。
检查权限
if (ContextCompat.checkSelfPermission(thisActivity,
Manifest.permission.READ_CONTACTS)
!= PackageManager.PERMISSION_GRANTED) {
}else{
//
}
申请授权
ActivityCompat.requestPermissions(thisActivity,
new String[]{Manifest.permission.READ_CONTACTS},
MY_PERMISSIONS_REQUEST_READ_CONTACTS);
当返回DENIED就需要进行申请授权了。
处理权限申请回调
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay! Do the
// contacts-related task you need to do.
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
}
return;
}
}
}
用户已经拒绝一次了,你又弹个授权框
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
Manifest.permission.READ_CONTACTS))
// Show an expanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
}
//TODO 上传GitHub