权限管理
public class BaseActivity extends AppCompatActivity {
private String[] mStrPermissions={
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE
};
private List<String> mPerList=new ArrayList<>();
private List<String> mPerNoList=new ArrayList<>();
private int requestcode;
private OnPermissionsResult permissionsResult;
protected void request(int requestCode,OnPermissionsResult permissionsResult){
if (!checkPermissionsAll()){
requestPermissionAll(requestCode, permissionsResult);
}
}
protected boolean checkPermissions(String permissions){
if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){
int check=checkSelfPermission(permissions);
return check==PackageManager.PERMISSION_GRANTED;
}
return false;
}
protected boolean checkPermissionsAll(){
mPerList.clear();
for (int i = 0; i < mStrPermissions.length; i++) {
boolean check=checkPermissions(mStrPermissions[i]);
if (!check){
mPerList.add(mStrPermissions[i]);
}
}
return mPerList.size()>0?false:true;
}
protected void requestPermission(String[] mPermissios,int requestCode){
this.requestcode=requestCode;
if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){
requestPermissions(mPermissios, requestCode);
}
}
protected void requestPermissionAll(int requestCode,OnPermissionsResult permissionsResult){
this.permissionsResult=permissionsResult;
requestPermission((String[]) mPerList.toArray(new String[mPerList.size()]),requestCode);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull @NotNull String[] permissions, @NonNull @NotNull int[] grantResults) {
mPerNoList.clear();
if (requestCode==requestcode){
if (grantResults.length>0){
for (int i = 0; i < grantResults.length; i++) {
if (grantResults[i]==PackageManager.PERMISSION_DENIED){
mPerNoList.add(permissions[i]);
}
}
if (permissionsResult!=null){
if (mPerNoList.size()==0){
permissionsResult.OnSuccess();
}else{
permissionsResult.OnFail(mPerNoList);
}
}
}
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
protected interface OnPermissionsResult{
void OnSuccess();
void OnFail(List<String> noPermissions);
}
protected boolean checkWindowPermissions(){
if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){
return Settings.canDrawOverlays(this);
}
return true;
}
protected void requestWindwoPermissions(int requestCode){
Intent intent=new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:"+getPackageName()));
startActivityForResult(intent,requestCode);
}
}