WHAT
Android 6.0 以上版本引入了运行时权限请求, 高敏感的权限将需要用户许可才可使用;
权限组 |
权限 |
CALENDAR |
READ_CALENDAR |
|
WRITE_CALENDAR |
CAMERA |
CAMERA |
CONTACTS |
READ_CONTACTS |
|
WRITE_CONTACTS |
|
GET_ACCOUNTS |
LOCATION |
ACCESS_FINE_LOCATION |
|
ACCESS_COARSE_LOCATION |
MICROPHONE |
RECORD_AUDIO |
PHONE |
READ_PHONE_STATE |
|
CALL_PHONE |
|
READ_CALL_LOG |
|
WRITE_CALL_LOG |
|
ADD_VOICEMAIL |
|
USE_SIP |
|
PROCESS_OUTGOING_CALLS |
SENSORS |
BODY_SENSORS |
SMS |
SEND_SMS |
|
RECEIVE_SMS |
|
READ_SMS |
|
RECEIVE_WAP_PUSH |
|
RECEIVE_MMS |
STORAGE |
READ_EXTERNAL_STORAGE |
|
WRITE_EXTERNAL_STORAGE |
HOW
代码示例
请求权限为:
ACCESS_WIFI_STATE
,
CHANGE_WIFI_STATE
,
ACCESS_FINE_LOCATION
,
ACCESS_COARSE_LOCATION
;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
private final int ACCESS_WIFI_AND_LOCATION = 0;
private String[] permissions = new String[] { Manifest.permission.ACCESS_WIFI_STATE, Manifest.permission.CHANGE_WIFI_STATE, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION };
@Override protected void (Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getPermissions(); }
public void getPermissions() { List<String> permissionList = new ArrayList<>(); for (String permission : permissions) { if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) { permissionList.add(permission); } } if (permissionList.isEmpty()) { Toast.makeText(this, "DONE", Toast.LENGTH_SHORT).show(); } else { requestPermissions(permissionList.toArray(new String[permissionList.size()]), ACCESS_WIFI_AND_LOCATION); } }
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode) { case ACCESS_WIFI_AND_LOCATION: { if (grantResults.length > 0) { for (String permission : permissions) { if (grantResults[0] == PackageManager.PERMISSION_DENIED) { Toast.makeText(this, "Nah: " + permission, Toast.LENGTH_SHORT).show(); } } } else { boolean showRationale = shouldShowRequestPermissionRationale(Manifest.permission.ACCESS_WIFI_STATE); if (showRationale) { Toast.makeText(this, "I NEED IT", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(this, "NONE", Toast.LENGTH_SHORT).show(); } } return; } default: super.onRequestPermissionsResult(requestCode, permissions, grantResults); } }
|
近期评论