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);
}