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参数 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 convertToIPermissionArray(String[] permissions) { // 将String[]转换为List List 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 grantedList) { Toaster.show(String.format(context.getString(R.string.demo_obtain_permission_success_hint) , PermissionConverter.getNickNamesByPermissions(context, grantedList))); } }