在android6.0以上一些权限是属于Protected Permission的,仅仅在AndroidManifest.xml声明是无法获取 权限的,需要动态的申请,否则就会报出如下的错误
下面附上多组动态权限申请例子
public class MainActivity extends AppCompatActivity {
private static final int PERMISSION_REQUEST = 1001;
String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.CAMERA,Manifest.permission.CALL_PHONE,Manifest.permission.READ_EXTERNAL_STORAGE};
List<String> permissionsList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//请求权限
initPermissions();
}
/**
* 请求权限
*/
private void initPermissions() {
permissionsList.clear();
//判断哪些权限未授予
for(String permission : permissions){
if(ActivityCompat.checkSelfPermission(this,permission)!= PackageManager.PERMISSION_GRANTED){
permissionsList.add(permission);
}
}
//请求权限
if(!permissionsList.isEmpty()){
String[] permissions = permissionsList.toArray(new String[permissionsList.size()]);//将List转为数组
ActivityCompat.requestPermissions(MainActivity.this, permissions, PERMISSION_REQUEST);
}
}
/**
* 权限回调,
* @param requestCode
* @param permissions
* @param grantResults
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode){
case PERMISSION_REQUEST:
break;
default:
break;
}
}
}
记得添加配置清单权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.CAMERA"/>