Android6.0(SDK 23)及以上需要手动申请权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.CAMERA"/>
private void applyPermission() {
//版本大于等于23(Android 6.0)才去申请权限
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
//要申请的所有权限
String[] allPermissons = {
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.CAMERA
};
//添加没有通过的权限
List<String> permissions = new ArrayList<>();
for(String p : allPermissons ){
if (ContextCompat.checkSelfPermission(this, p)!=PackageManager.PERMISSION_GRANTED){
permissions.add(p);
}
}
//是否有没通过的权限
if (!permissions.isEmpty()) {
String[] permissoinsArr = permissions.toArray(new String[permissions.size()]);
//申请权限
ActivityCompat.requestPermissions(this, permissoinsArr, 1);
}else{
init();
}
}else{
init();
}
}
private void init(){
//初始化
//....
}
/**
* 申请权限回调
* @param requestCode : 请求码
* @param permissions :申请的权限数组
* @param grantResults:授权结果数组,同意为0否则不为0
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode){
case 1:
if (grantResults.length > 0){
//遍历判断是否同意授权
for (int result : grantResults){
if (result!=PackageManager.PERMISSION_GRANTED){//拒绝权限申请
Toast.makeText(this,"必须同意所有权限才能使用该应用", Toast.LENGTH_SHORT).show();
finish();//退出程序
return;
}
init();
}
}else {
Toast.makeText(this,"发生未知错误", Toast.LENGTH_SHORT).show();
}
break;
default:
break;
}
}
}