1、单个权限申请
private void requestPermission() {
if(ContextCompat.checkSelfPermission(this, permission.RECORD_AUDIO)!=PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.RECORD_AUDIO},1);
}
if(ContextCompat.checkSelfPermission(this, permission.CALL_PHONE)!=PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE},2);
}
if (ContextCompat.checkSelfPermission(this,Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE}, 3);
}
if(ContextCompat.checkSelfPermission(this, permission.READ_CALL_LOG)!=PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CALL_LOG},4);
}
}
回调:
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case 1:
if(grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION_GRANTED){
}else{
Toast.makeText(this, "没有录音权限", Toast.LENGTH_SHORT).show();
}
break;
case 2:
if(grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION_GRANTED){
}else{
Toast.makeText(this, "没有拨打电话权限", Toast.LENGTH_SHORT).show();
}
break;
case 3:
if(grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION_GRANTED){
}else{
Toast.makeText(this, "没有读写本地文件权限", Toast.LENGTH_SHORT).show();
}
break;
case 4:
if(grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION_GRANTED){
}else{
AlertDialog dialog=new AlertDialog.Builder(LoginActivity.this)
.setTitle("友情提示")
.setMessage("没有权限将影响使用,请开启权限!")
.setPositiveButton("开启", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
ShowAppSetDetails.showInstalledAppDetails(LoginActivity.this, "com.ruibai.order");
}
})
.setCancelable(false)
.create();
dialog.show();
Toast.makeText(this, "没有访问通话记录权限", Toast.LENGTH_LONG).show();
}
break;
default:
break;
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
2,一次申请多条权限
private static final int MY_PERMISSIONS_RECORD_AUDIO = 1;
private static final int MY_PERMISSIONS_WRITE_EXTERNAL_STORAGE = 2;
private static final int MY_PERMISSIONS_CALL_PHONE = 3;
private static final int MY_PERMISSIONS_READ_CALL_LOG = 4;
String[] permissions = new String[]{
Manifest.permission.RECORD_AUDIO,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.CALL_PHONE,
Manifest.permission.READ_CALL_LOG
};
//声明一个集合,存储用户拒绝授权的权限
List<String>mPermissionList=new ArrayList<String>();
最好写在onStart中:
@Override
protected void onStart() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
for (int i = 0; i < permissions.length; i++) {
if (ContextCompat.checkSelfPermission(LoginActivity.this, permissions[i]) != PackageManager.PERMISSION_GRANTED) {
mPermissionList.add(permissions[i]);
}
}
if (mPermissionList.isEmpty()) {//未授予的权限为空,表示都授予了
Toast.makeText(LoginActivity.this,"已经授权",Toast.LENGTH_LONG).show();
} else {//请求权限方法
String[] permissions = mPermissionList.toArray(new String[mPermissionList.size()]);//将List转为数组
ActivityCompat.requestPermissions(LoginActivity.this, permissions, MY_PERMISSIONS_RECORD_AUDIO);
ActivityCompat.requestPermissions(LoginActivity.this, permissions, MY_PERMISSIONS_WRITE_EXTERNAL_STORAGE);
ActivityCompat.requestPermissions(LoginActivity.this, permissions, MY_PERMISSIONS_CALL_PHONE);
ActivityCompat.requestPermissions(LoginActivity.this, permissions, MY_PERMISSIONS_READ_CALL_LOG);
}
}
super.onStart();
}
回调:
@SuppressLint("NewApi")
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
// TODO Auto-generated method stub
if(requestCode == MY_PERMISSIONS_RECORD_AUDIO){
if(grantResults[0]==PackageManager.PERMISSION_GRANTED){
}else{
AlertDialog dialog=new AlertDialog.Builder(LoginActivity.this)
.setTitle("友情提示")
.setMessage("没有权限将影响使用,请开启权限!")
.setPositiveButton("开启", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
ShowAppSetDetails.showInstalledAppDetails(LoginActivity.this, "com.ruibai.order");
}
})
.setCancelable(false)
.create();
dialog.show();
}
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}