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;
}
}
本文純個人學習筆記,如有錯誤之處敬請留意糾正。跪謝。