JKBaseLib/BaseLibrary/src/main/java/com/tfq/library/permission/PermissionUtils.java

70 lines
2.7 KiB
Java
Raw Normal View History

package com.tfq.library.permission;
import android.content.Context;
import android.util.Log;
import com.hjq.permissions.permission.base.IPermission;
import com.hjq.toast.Toaster;
import com.tfq.library.R;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
public class PermissionUtils {
public static IPermission invokeGetCachePermission(String permission) {
try {
// 修正1: 使用正确的类名 PermissionUtils
Class<?> permissionUtilsClass = Class.forName("com.hjq.permissions.permission.PermissionLists");
// 修正2: 方法只需要一个String参数
Method method = permissionUtilsClass.getDeclaredMethod("getCachePermission", String.class);
// 设置可访问因为方法是private的
method.setAccessible(true);
// 修正3: 调用时传入null静态方法和permission参数
2025-11-20 15:06:02 +08:00
Object result = method.invoke(null, permission);
// 处理返回值
if (result instanceof IPermission) {
return (IPermission) result;
}
return null;
} catch (ClassNotFoundException e) {
Log.e("Reflection", "PermissionUtils class not found", e);
} catch (NoSuchMethodException e) {
Log.e("Reflection", "getCachePermission method not found", e);
} catch (IllegalAccessException e) {
Log.e("Reflection", "Illegal access to method", e);
} catch (InvocationTargetException e) {
Log.e("Reflection", "Method invocation failed", e);
} catch (Exception e) {
Log.e("Reflection", "Unexpected error", e);
}
return null;
}
public static List<IPermission> convertToIPermissionArray(String[] permissions) {
// 将String[]转换为List<IPermission>
List<IPermission> permissionList = new ArrayList<>();
if (permissions == null || permissions.length == 0) {
return permissionList;
}
for (int i = 0; i < permissions.length; i++) {
String permission = permissions[i];
// 1. 尝试通过反射获取缓存的IPermission
IPermission cachedPermission = invokeGetCachePermission(permission);
if (cachedPermission != null) {
permissionList.add(cachedPermission);
}
}
return permissionList;
}
public static void showGrantedPermissionsToast(Context context, List<IPermission> grantedList) {
Toaster.show(String.format(context.getString(R.string.demo_obtain_permission_success_hint)
, PermissionConverter.getNickNamesByPermissions(context, grantedList)));
}
}