1,介绍
【1】一类是Normal Permissions,这类权限一般不涉及用户隐私,是不需要用户进行授权的,比如手机震动、访问网络等
1.ACCESS_LOCATION_EXTRA_COMMANDS
2.ACCESS_NETWORK_STATE
3.ACCESS_NOTIFICATION_POLICY
4.ACCESS_WIFI_STATE
5.BLUETOOTH
6.BLUETOOTH_ADMIN
7.BROADCAST_STICKY
8.CHANGE_NETWORK_STATE
9.CHANGE_WIFI_MULTICAST_STATE
10.CHANGE_WIFI_STATE
11.DISABLE_KEYGUARD
12.EXPAND_STATUS_BAR
13.GET_PACKAGE_SIZE
14.INSTALL_SHORTCUT
15.INTERNET
16.KILL_BACKGROUND_PROCESSES
17.MODIFY_AUDIO_SETTINGS
18.NFC
19.READ_SYNC_SETTINGS
20.READ_SYNC_STATS
21.RECEIVE_BOOT_COMPLETED
22.REORDER_TASKS
23.REQUEST_INSTALL_PACKAGES
24.SET_ALARM
25.SET_TIME_ZONE
26.SET_WALLPAPER
27.SET_WALLPAPER_HINTS
28.TRANSMIT_IR
29.UNINSTALL_SHORTCUT
30.USE_FINGERPRINT
31.VIBRATE
32.WAKE_LOCK
33.WRITE_SYNC_SETTINGS
【2】另一类是Dangerous Permission,一般是涉及到用户隐私的,需要用户进行授权,比如读取sdcard、访问通讯录等。
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
2, 如何动态获取权限
-
先判断版本号,然后判断是否有权限,在判断是否需要申请
//判断如果api版本>=23 需要动态获取权限
if(Build.VERSION.SDK_INT>=23){
//①checkSelfPermission 检查当前应用是否有特定权限 第一个参数 activity
//第二个参数 需要检测的权限 Manifest.permission.XXXXX 需要注意 只有危险权限需要动态申请
//危险权限指 跟用户隐私相关的权限 sd卡 短信 通话记录 打电话权限 位置权限 摄像头权限 录音机权限
if( ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE)==
PermissionChecker.PERMISSION_DENIED){//判读是否有SD卡读取权限
// ② 如果没有权限动态申请权限
//动态申请权限 第二个参数 需要申请的权限的数据 可以一次申请多个权限
//第三个参数 请求码 需要注意不能小于0
ActivityCompat.requestPermissions(getActivity(),new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},1);
return;
}
}
-
onRequestPermissionsResult回调处理
-
我们在fragment动态申请的权限。但是在MainActivity中才能获取到对应的返回结果。
/**
* 申请权限之后 用户返回的结果在onRequestPermissionsResult中获取
* @param requestCode 请求权限的时候的请求码
* @param permissions 请求的所有权限
* @param grantResults 用户操作后的权限结果 PermissionChecker.PERMISSION_GRANTED授权了
* PermissionChecker.PERMISSION_DENIED 未授权
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if(grantResults[0]== PermissionChecker.PERMISSION_GRANTED){
//获取权限 再次重新加载数据
VbangFragment fragment = (VbangFragment) fragments.get(R.id.tab_vbang);
fragment.initData();
}else{
Utils.showToast(this,"请授权SD卡权限后再操作");
}
}