在activity基类中添加如下代码即可调用时只要需要调用hasPermission()方法即可,将需要的权限传入。返回true,则表示全部授权,返回false将自动申请授权
权限授权完成后会调用permissionOver(int eventType)方法 可以根据eventType来决定授权后的操作
/**
* 请求所需要的权限
*
* @param permissionName
* @return
*/
public boolean hasPermission(int eventType, String... permissionName) {
this.currentPermissEventType = eventType;
if (permissionName == null) return true;
for (int i = 0; i < permissionName.length; i++) {
if (ContextCompat.checkSelfPermission(this,permissionName[i])!= PackageManager.PERMISSION_GRANTED) {
permissionSet.add(permissionName[i]);
}
}
if (permissionSet.size() == 0) return true;
else {
ActivityCompat.requestPermissions(this,
permissionSet.toArray(new String[permissionSet.size()]),
REQUEST_CODE_PERMISSON);
return false;
}
}
private HashSet<String> permissionSet = new HashSet<>();
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
StringBuffer stringBuffer = new StringBuffer();
for (String e : permissions
) {
stringBuffer.append(e + "---");
}
LogUtils.e("BaseActivity", "permissions:" + stringBuffer.toString());
switch (requestCode) {
case REQUEST_CODE_PERMISSON:
for (int i = 0; i < permissions.length; i++) {
// Check for ACCESS_FINE_LOCATION
permissionSet.remove(permissions[i]);
if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
} else {
ToastUtils.show("权限被拒绝");
}
}
for (String s : permissionSet) {
if (ContextCompat.checkSelfPermission(this, s)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{s},
REQUEST_CODE_PERMISSON);
} else {
permissionSet.remove(s);
}
}
if (permissionSet.size() == 0) permissionOver(currentPermissEventType );
break;
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
/**
* 授权完成调用该方法
*/
protected void permissionOver(int eventType) {
}