代码:
/**
* created by : bifan-wei
*/
public class PermissionChecker {
private String tag = "PermissionChecker";
private final int PermissionChecker_requestCode = 0x04;
private AppCompatActivity context;
private String[] Permissions;
public PermissionChecker(AppCompatActivity context) {
this.context = context;
}
public void requestPermission(String... permissions) {
if (!checkPermission(permissions)) {
ActivityCompat.requestPermissions(context,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
PermissionChecker_requestCode);
}
}
public boolean checkPermission(String... permissions) {
if (permissions != null && permissions.length > 0) {
this.Permissions = permissions;
for (String p : permissions) {
if (!permissionIsPermitted(p)) {
return false;
}
}
}
return true;
}
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults, IPermissionCheckListener checkListener) {
switch (requestCode) {
case PermissionChecker_requestCode: {
if (grantResults.length > 0) {
if (grantResults.length == permissions.length) {
List<String> denies = new ArrayList<>();
for (int i = 0; i < grantResults.length; i++) {
if (grantResults[i] == android.content.pm.PackageManager.PERMISSION_DENIED) {
denies.add(Permissions[i]);
}
}
if (checkListener != null) {
if (denies.size() > 0) {
checkListener.onUnPermit((String[]) denies.toArray());
} else {
checkListener.onPermit();
}
}
} else {
Log.e("PermissionsCheck", "error may caused,grantResults.length != permissions.length");
if (checkListener != null) {
checkListener.onException();
}
}
} else {
if (checkListener != null) {
checkListener.onException();
}
}
return;
}
}
}
public boolean permissionIsPermitted(String permission) {
return ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED;
}
public interface IPermissionCheckListener {
void onPermit();
void onException();
void onUnPermit(String[] permissions);
}
}
使用:
permissionChecker = new PermissionChecker(this);
permissionChecker.requestPermission(
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.ACCESS_NETWORK_STATE,
Manifest.permission.ACCESS_WIFI_STATE,
Manifest.permission.DISABLE_KEYGUARD,
Manifest.permission.READ_EXTERNAL_STORAGE
);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(permissionChecker!=null){
permissionChecker.onRequestPermissionsResult(requestCode, permissions, grantResults, new PermissionChecker.IPermissionCheckListener() {
@Override
public void onPermit() {
showToast("onPermit");
}
@Override
public void onException() {
showToast("onException");
}
@Override
public void onUnPermit(String[] permissions) {
showToast("请确保权限已开启");
}
});
}else{
showToast("permissionChecker==null");
}
}
注意:如果targetSdkVersion 23 小于23,将不会弹出是否允许权限对话框