BaseFragment 权限的反射方法修复

This commit is contained in:
jk 2025-11-20 15:38:01 +08:00
parent d3e5a6c72e
commit 73a6392629
13 changed files with 33 additions and 51 deletions

View File

@ -118,7 +118,7 @@ public abstract class BaseFragment extends Fragment {
} }
private void requestPermission(String[] permission, boolean show_doNotAskAgain, Listener listener) { private void requestPermission(String[] permission, boolean show_doNotAskAgain, Listener listener) {
List<IPermission> iPermissionList = convertToIPermissionArray(requireActivity(),permission); List<IPermission> iPermissionList = convertToIPermissionArray(permission);
if (iPermissionList.isEmpty()){ if (iPermissionList.isEmpty()){
return; return;
} }

View File

@ -7,61 +7,43 @@ import com.hjq.permissions.permission.base.IPermission;
import com.hjq.toast.Toaster; import com.hjq.toast.Toaster;
import com.tfq.library.R; import com.tfq.library.R;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
public class PermissionUtils { public class PermissionUtils {
public static IPermission invokeGetCachePermission(Context context, String permission) { public static IPermission invokeGetCachePermission(String permission) {
try { try {
Class<?> xxPermissionsClass = Class.forName("com.hjq.permissions.permission.PermissionLists"); // 修正1: 使用正确的类名 PermissionUtils
// 尝试获取方法可能需要调整方法名和参数 Class<?> permissionUtilsClass = Class.forName("com.hjq.permissions.permission.PermissionUtils");
Method method = null; // 修正2: 方法只需要一个String参数
try { Method method = permissionUtilsClass.getDeclaredMethod("getCachePermission", String.class);
// 尝试获取静态方法 // 设置可访问因为方法是private的
method = xxPermissionsClass.getDeclaredMethod("getCachePermission", Context.class, String.class);
} catch (NoSuchMethodException e1) {
try {
// 尝试获取实例方法
method = xxPermissionsClass.getDeclaredMethod("getCachePermission", Context.class, String.class);
} catch (NoSuchMethodException e2) {
// 尝试其他可能的方法名
String[] possibleMethodNames = {
"getPermissionCache",
"getCachedPermission",
"checkCachedPermission"
};
for (String methodName : possibleMethodNames) {
try {
method = xxPermissionsClass.getDeclaredMethod(methodName, Context.class, String.class);
break;
} catch (NoSuchMethodException e3) {
// 继续尝试下一个方法名
}
}
if (method == null) {
throw new NoSuchMethodException("No suitable cache method found");
}
}
}
// 设置可访问
method.setAccessible(true); method.setAccessible(true);
// 调用方法 // 修正3: 调用时传入null静态方法和permission参数
Object result = method.invoke(null, permission); Object result = method.invoke(null, permission);
// 处理返回值 // 处理返回值
if (result instanceof IPermission) { if (result instanceof IPermission) {
return (IPermission) result; return (IPermission) result;
} else {
return null;
} }
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) { } catch (Exception e) {
Log.e("Reflection", "Failed to invoke cache method", e); Log.e("Reflection", "Unexpected error", e);
return null;
} }
return null;
} }
public static List<IPermission> convertToIPermissionArray(Context context, String[] permissions) { public static List<IPermission> convertToIPermissionArray(String[] permissions) {
// 将String[]转换为List<IPermission> // 将String[]转换为List<IPermission>
List<IPermission> permissionList = new ArrayList<>(); List<IPermission> permissionList = new ArrayList<>();
@ -71,7 +53,7 @@ public class PermissionUtils {
for (int i = 0; i < permissions.length; i++) { for (int i = 0; i < permissions.length; i++) {
String permission = permissions[i]; String permission = permissions[i];
// 1. 尝试通过反射获取缓存的IPermission // 1. 尝试通过反射获取缓存的IPermission
IPermission cachedPermission = invokeGetCachePermission(context, permission); IPermission cachedPermission = invokeGetCachePermission(permission);
if (cachedPermission != null) { if (cachedPermission != null) {
permissionList.add(cachedPermission); permissionList.add(cachedPermission);
} }

View File

@ -82,7 +82,7 @@ public class Activity_Font extends BaseActivity {
selectedScaleIndex(4); selectedScaleIndex(4);
} }
IPermission iPermission = PermissionUtils.invokeGetCachePermission(this, Manifest.permission.WRITE_SETTINGS); IPermission iPermission = PermissionUtils.invokeGetCachePermission(Manifest.permission.WRITE_SETTINGS);
assert iPermission != null; assert iPermission != null;
boolean granted = XXPermissions.isGrantedPermission(this, iPermission); boolean granted = XXPermissions.isGrantedPermission(this, iPermission);
if (!granted) { if (!granted) {
@ -96,7 +96,7 @@ public class Activity_Font extends BaseActivity {
} }
private void onClick(View view) { private void onClick(View view) {
IPermission iPermission = PermissionUtils.invokeGetCachePermission(this, Manifest.permission.WRITE_SETTINGS); IPermission iPermission = PermissionUtils.invokeGetCachePermission(Manifest.permission.WRITE_SETTINGS);
assert iPermission != null; assert iPermission != null;
boolean granted = XXPermissions.isGrantedPermission(this, iPermission); boolean granted = XXPermissions.isGrantedPermission(this, iPermission);
int viewId = view.getId(); int viewId = view.getId();

View File

@ -1 +1 @@
f0eda3a10182298e5b5a7eb08d8b5be2 ed7a88b64be20ded1998126dd6631842

View File

@ -1 +1 @@
1dc088f66268b24631ff07de18d01653da892cdd b217048d6df289c811e4cc301d51e987ae425efe

View File

@ -1 +1 @@
4cefbfc564c782e9184dc9c20a61fe26283f400f0d7348aa65dfe8b89c220844 a552d964e098aac65b1fc88b4584a1fc0695d36865a60f7d7724bc19efb9b7cd

View File

@ -1 +1 @@
b4c4dd1014aa3e9309c6e5cc331d0f61124b63e36d6c4036736893647bdaad0a387a3cc3c51abae8f02d7e791ff5ef981341c377c19f9fe640daa2683d890c2a 4e2c98f15c47bf6ae40857075d4ced8cb651ecea8375b1483e18ecf4dc028efe775adfe306909215ee163b933327ed46d486f7973f01f37c0f5f95bb71794a0f

View File

@ -9,6 +9,6 @@
<version>1.0.0</version> <version>1.0.0</version>
<version>1.0.1</version> <version>1.0.1</version>
</versions> </versions>
<lastUpdated>20251120071036</lastUpdated> <lastUpdated>20251120073059</lastUpdated>
</versioning> </versioning>
</metadata> </metadata>

View File

@ -1 +1 @@
a1cb3163f7ad33a5fa553a734f7ac26b 895299e42034a995a2d06c1332709ff8

View File

@ -1 +1 @@
08fffc3d17a1b097aa7cc6f33e7cda6e9e8b0ec8 d5bf2a48888eba42d253b74ec112263bdd1fc45e

View File

@ -1 +1 @@
66de8d40ce49c840f6ef77323221838b1e74d2650dfec1020d224a0f174fce0d e19f6fa0a92ad456670d63a5623b935077e7c42ff5461b1142f67813c37d4177

View File

@ -1 +1 @@
88dd8c130d66ff16de744ca0b6b942b22e4b73025e255605ad01b02d4b869dc190fbed217e7b5dc738dea68867ae8ef7ad0bb2c12f90bae08e2cb403400d38c7 cc7bd44d0ceb26b591acf7780d97917c9498051256b05f1294c716facdf459c62e573455f892fcfe93f78a837a1e71bedcec66fcb50bb619b685ef1d442bd10a