6.0以后不仅在xml声明权限,还需要在运行代码中动态去声明。
1、权限分为普通权限和危险权限。如下是普通权限,不必动态声明。
1、ACCESS_LOCATION_EXTRA_COMMANDS
2、ACCESS_NETWORK_STATE
3、ACCESS_NOTIFICATION_POLICY
4、ACCESS_WIFI_STATEBLUETOOTH
5、BLUETOOTH_ADMIN
6、BROADCAST_STICKY
7、INTERNET
.
.
.
危险权限如下(可能不完整),需要动态申请
2.下面是如何一次申请多个权限,代码如下
先声明一个保存多个权限的数组
//1、声明一个数据保存需要声明的权限 List<String> permissionList = new ArrayList<>();
if (ContextCompat.checkSelfPermission(PersonCenter.this, Manifest.permission.WRITE_EXTERNAL_STORAGE
) != PackageManager.PERMISSION_GRANTED) {
permissionList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
/* ActivityCompat.requestPermissions(PersonCenter.this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);*/
}
if (ContextCompat.checkSelfPermission(PersonCenter.this, Manifest.permission.CAMERA) !=
PackageManager.PERMISSION_GRANTED) {
permissionList.add(Manifest.permission.CAMERA);
}
if (!permissionList.isEmpty()) {
String[] permissions = permissionList.toArray(new String[permissionList.size()]);
ActivityCompat.requestPermissions(PersonCenter.this,
permissions, 1);
} else {
//执行需要权限的任务,一般封装成一个方法
}
//权限回调
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case 1:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults.length >= 0) {
//getimg();
} else {
Toast.makeText(getApplicationContext(), "你拒绝了读取SD的权限", Toast.LENGTH_SHORT).show();
}
break;
}
}
本文纯个人学习笔记,如有错误之处敬请留意纠正。跪谢。