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

70 lines
2.7 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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<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)));
}
}