升級到23以后就需要對Android6.0進(jìn)行適配,適配的重點(diǎn)就是對權(quán)限進(jìn)行適配仰剿,
權(quán)限分為一般權(quán)限和危險權(quán)限创淡,項(xiàng)目如果涉及危險權(quán)限就需要進(jìn)行適配。
下面主要涉及多個權(quán)限一起請求的處理
private void checkPermision() {
String[] mPermissions = new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA};
List<String> deniedPermissions = findDeniedPermissions(mPermissions);
if (deniedPermissions != null && deniedPermissions.size() > 0) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
deniedPermissions.get(0))) {
//如果拒絕過南吮,跳轉(zhuǎn)到設(shè)置頁面
jump2Setting();
} else {
//申請多個對應(yīng)的權(quán)限
ActivityCompat.requestPermissions(this,
deniedPermissions.toArray(new String[]{}),
REQUECT_CODE_SDCARD);
}
} else {
//權(quán)限允許后自己的操作
Toast.makeText(PermisionActivity.this, "獲取權(quán)限成功", Toast.LENGTH_SHORT).show();
}
}
//獲取沒有允許的權(quán)限
private List<String> findDeniedPermissions(String[] permissions) {
List<String> list = new ArrayList<>();
for (String str : permissions) {
if (ContextCompat.checkSelfPermission(this,
str) != PackageManager.PERMISSION_GRANTED) {
list.add(str);
}
}
return list;
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case REQUECT_CODE_SDCARD:
int permission = 0;
for (int i = 0; i < permissions.length; i++) {
for (int j = 0; j < mPermissions.length; j++) {
if (mPermissions[j].equals(permissions[i])) {
if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
permission++;
}
}
}
}
if (permission == permissions.length) {
//請求的權(quán)限都允許了的操作
Toast.makeText(PermisionActivity.this, "獲取權(quán)限成功", Toast.LENGTH_SHORT).show();
} else {
//請求的多個權(quán)限如果存在沒有運(yùn)行的情況
Toast.makeText(PermisionActivity.this, "允許權(quán)限后才能使用該功能", Toast.LENGTH_SHORT).show();
}
break;
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//如果是從設(shè)置界面返回,就繼續(xù)判斷權(quán)限
if (requestCode == REQUECT_CODE_SETTING) {
checkPermision();
}
}