
权限.png
1.首先判断版本是否是6.0以下,然后通过映射调用方法
if (PermissionUtils.isOverA_6()) {
// 如果不是6.0以上 那么直接执行方法 反射获取执行方法
PermissionUtils.executeMethod(mObject, mRequestCode);
List<String> permiss = PermissionUtils.getNotPermissions(mObject, mRequestPermission);
if (permiss == null || permiss.size() <= 0) {
PermissionUtils.executeMethod(mObject, mRequestCode);
} else {
ActivityCompat.requestPermissions(PermissionUtils.getActivity(mObject), permiss.toArray(new String[permiss.size()]), mRequestCode);
}
return;
}
2.通过映射执行对应的注解方法
/**
* 执行方法
*
* @param object
* @param method
*/
public static void startMethod(Object object, Method method) {
//通过反射执行方法 参数1:方法所在类 参数2:参数
try {
//允许执行私有方法
method.setAccessible(true);
method.invoke(object, null);
//有参数的调用
// method.invoke(object, new Object() {});
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
3.Main调用
@PermissionCallBack(requestCode = CALL_PHONE_REQUEST)
private void getPermission() {
Toast.makeText(this,"权限获取成功",Toast.LENGTH_LONG).show();
}
@PermissionFailedBack(requestCode = CALL_PHONE_REQUEST)
private void getPermissionBack() {
Toast.makeText(this, "失败权限", Toast.LENGTH_SHORT).show();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
PermissionHelper.requestPermissionCallBack(this, CALL_PHONE_REQUEST, permissions);
}
源码地址:
https://download.csdn.net/download/hanfeifeih/11180329