權(quán)限.png
1.首先判斷版本是否是6.0以下,然后通過映射調(diào)用方法
if (PermissionUtils.isOverA_6()) {
// 如果不是6.0以上 那么直接執(zhí)行方法 反射獲取執(zhí)行方法
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.通過映射執(zhí)行對應(yīng)的注解方法
/**
* 執(zhí)行方法
*
* @param object
* @param method
*/
public static void startMethod(Object object, Method method) {
//通過反射執(zhí)行方法 參數(shù)1:方法所在類 參數(shù)2:參數(shù)
try {
//允許執(zhí)行私有方法
method.setAccessible(true);
method.invoke(object, null);
//有參數(shù)的調(diào)用
// method.invoke(object, new Object() {});
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
3.Main調(diào)用
@PermissionCallBack(requestCode = CALL_PHONE_REQUEST)
private void getPermission() {
Toast.makeText(this,"權(quán)限獲取成功",Toast.LENGTH_LONG).show();
}
@PermissionFailedBack(requestCode = CALL_PHONE_REQUEST)
private void getPermissionBack() {
Toast.makeText(this, "失敗權(quán)限", 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