BaseFragment 权限不使用反射
This commit is contained in:
parent
ee56f71251
commit
df3481c924
|
|
@ -1,18 +1,13 @@
|
||||||
package com.tfq.library.base;
|
package com.tfq.library.base;
|
||||||
|
|
||||||
import static com.tfq.library.app.BaseConstants.REQUEST_PER;
|
import static com.tfq.library.app.BaseConstants.REQUEST_PER;
|
||||||
import static com.tfq.library.permission.PermissionUtils.convertToIPermissionArray;
|
|
||||||
import static com.tfq.library.permission.PermissionUtils.showGrantedPermissionsToast;
|
|
||||||
|
|
||||||
import android.Manifest;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.Log;
|
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.Toast;
|
|
||||||
|
|
||||||
import androidx.annotation.LayoutRes;
|
import androidx.annotation.LayoutRes;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
|
@ -22,12 +17,12 @@ import androidx.fragment.app.Fragment;
|
||||||
import com.hjq.permissions.OnPermissionCallback;
|
import com.hjq.permissions.OnPermissionCallback;
|
||||||
import com.hjq.permissions.XXPermissions;
|
import com.hjq.permissions.XXPermissions;
|
||||||
import com.hjq.permissions.permission.base.IPermission;
|
import com.hjq.permissions.permission.base.IPermission;
|
||||||
import com.tfq.library.utils.LogK;
|
import com.hjq.toast.Toaster;
|
||||||
|
import com.tfq.library.R;
|
||||||
|
import com.tfq.library.permission.PermissionConverter;
|
||||||
import com.tfq.library.view.Animation;
|
import com.tfq.library.view.Animation;
|
||||||
import com.tfq.library.view.AuthDialog;
|
import com.tfq.library.view.AuthDialog;
|
||||||
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -71,29 +66,22 @@ public abstract class BaseFragment extends Fragment {
|
||||||
/**
|
/**
|
||||||
* 权限请求
|
* 权限请求
|
||||||
*/
|
*/
|
||||||
protected void requestPermission(String[] per, Listener listener) {
|
protected void requestPermission(IPermission[] per,Listener listener) {
|
||||||
requestPermission(per, content, listener);
|
requestPermission(per, content, listener);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void requestPermission(String[] per, String content, Listener listener) {
|
protected void requestPermission(IPermission[] per, String content, Listener listener) {
|
||||||
if (!TextUtils.isEmpty(content)) {
|
if (!TextUtils.isEmpty(content)) {
|
||||||
this.content = content;
|
this.content = content;
|
||||||
}
|
}
|
||||||
requestPermission(per, content, true, false, listener);
|
requestPermission(per, content, true, listener);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void requestPermission(String[] per, String content, boolean show_doNotAskAgain, Listener listener) {
|
protected void requestPermission(IPermission[] per, String content, boolean req_permission, Listener listener) {
|
||||||
if (!TextUtils.isEmpty(content)) {
|
if (!TextUtils.isEmpty(content)) {
|
||||||
this.content = content;
|
this.content = content;
|
||||||
}
|
}
|
||||||
requestPermission(per, content, true, show_doNotAskAgain, listener);
|
requestPermission(per, req_permission, listener);
|
||||||
}
|
|
||||||
|
|
||||||
protected void requestPermission(String[] per, String content, boolean req_permission, boolean show_doNotAskAgain, Listener listener) {
|
|
||||||
if (!TextUtils.isEmpty(content)) {
|
|
||||||
this.content = content;
|
|
||||||
}
|
|
||||||
requestPermission(per, req_permission, show_doNotAskAgain, listener);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -101,33 +89,25 @@ public abstract class BaseFragment extends Fragment {
|
||||||
*
|
*
|
||||||
* @param permission 权限集合
|
* @param permission 权限集合
|
||||||
* @param req_permission 申请权限之前是否提示,默认false,不提示
|
* @param req_permission 申请权限之前是否提示,默认false,不提示
|
||||||
* @param show_doNotAskAgain 权限申请失败是否调整到设置页,默认false,不关闭
|
|
||||||
* @param listener 监听
|
* @param listener 监听
|
||||||
*/
|
*/
|
||||||
protected void requestPermission(String[] permission, boolean req_permission, boolean show_doNotAskAgain, Listener listener) {
|
protected void requestPermission(IPermission[] permission, boolean req_permission, Listener listener) {
|
||||||
if (!req_permission) {//不弹窗直接申请权限
|
if (!req_permission) {//不弹窗直接申请权限
|
||||||
requestPermission(permission, show_doNotAskAgain, listener);
|
requestPermission(permission, null ,listener);
|
||||||
} else {//先弹窗,再去申请
|
} else {//先弹窗,再去申请
|
||||||
new AuthDialog(getActivity(), REQUEST_PER, new AuthDialog.Listener() {
|
new AuthDialog(getActivity(), REQUEST_PER, new AuthDialog.Listener() {
|
||||||
@Override
|
@Override
|
||||||
public void callBack() {
|
public void callBack() {
|
||||||
//同意申请权限,去申请
|
//同意申请权限,去申请
|
||||||
requestPermission(permission, show_doNotAskAgain, listener);
|
requestPermission(permission, null ,listener);
|
||||||
}
|
}
|
||||||
}).show();
|
}).show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void requestPermission(String[] permission, boolean show_doNotAskAgain, Listener listener) {
|
private void requestPermission(IPermission[] iPermissions, Object object, Listener listener) {
|
||||||
List<IPermission> iPermissionList = convertToIPermissionArray(permission);
|
|
||||||
for (int i = 0; i < iPermissionList.size(); i++) {
|
|
||||||
LogK.e("iPermissionList="+iPermissionList.get(i));
|
|
||||||
}
|
|
||||||
if (iPermissionList.isEmpty()){
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
XXPermissions.with(getActivity())
|
XXPermissions.with(getActivity())
|
||||||
.permissions(iPermissionList)
|
.permissions(iPermissions)
|
||||||
.request(new OnPermissionCallback() {
|
.request(new OnPermissionCallback() {
|
||||||
@Override
|
@Override
|
||||||
public void onResult(@NonNull List<IPermission> grantedList, @NonNull List<IPermission> deniedList) {
|
public void onResult(@NonNull List<IPermission> grantedList, @NonNull List<IPermission> deniedList) {
|
||||||
|
|
@ -136,7 +116,7 @@ public abstract class BaseFragment extends Fragment {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
listener.success();
|
listener.success();
|
||||||
showGrantedPermissionsToast(requireActivity(),grantedList);
|
showGrantedPermissionsToast(requireActivity(), grantedList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -154,6 +134,11 @@ public abstract class BaseFragment extends Fragment {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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)));
|
||||||
|
}
|
||||||
|
|
||||||
/******************************lifecycle area*****************************************/
|
/******************************lifecycle area*****************************************/
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -1,73 +1,70 @@
|
||||||
package com.tfq.library.permission;
|
//package com.tfq.library.permission;
|
||||||
|
//
|
||||||
import android.content.Context;
|
//import android.content.Context;
|
||||||
import android.util.Log;
|
//import android.util.Log;
|
||||||
|
//
|
||||||
import com.hjq.permissions.permission.base.IPermission;
|
//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 com.tfq.library.utils.LogK;
|
//import com.tfq.library.utils.LogK;
|
||||||
|
//
|
||||||
import java.lang.reflect.InvocationTargetException;
|
//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(String permission) {
|
// public static IPermission invokeGetCachePermission(String permission) {
|
||||||
try {
|
// try {
|
||||||
// 修正1: 使用正确的类名 PermissionUtils
|
// // 修正1: 使用正确的类名 PermissionLists
|
||||||
Class<?> permissionUtilsClass = Class.forName("com.hjq.permissions.permission.PermissionLists");
|
// Class<?> permissionUtilsClass = Class.forName("com.hjq.permissions.permission.PermissionLists");
|
||||||
// 修正2: 方法只需要一个String参数
|
// // 修正2: 方法只需要一个String参数
|
||||||
Method method = permissionUtilsClass.getDeclaredMethod("getCachePermission", String.class);
|
// Method method = permissionUtilsClass.getDeclaredMethod("getCachePermission", String.class);
|
||||||
// 设置可访问(因为方法是private的)
|
// // 设置可访问(因为方法是private的)
|
||||||
method.setAccessible(true);
|
// method.setAccessible(true);
|
||||||
// 修正3: 调用时传入null(静态方法)和permission参数
|
// // 修正3: 调用时传入null(静态方法)和permission参数
|
||||||
Object result = method.invoke(null, permission);
|
// Object result = method.invoke(null, permission);
|
||||||
// 处理返回值
|
// // 处理返回值
|
||||||
if (result instanceof IPermission) {
|
// if (result instanceof IPermission) {
|
||||||
LogK.e("0000000000000");
|
// return (IPermission) result;
|
||||||
return (IPermission) result;
|
// }
|
||||||
}
|
// return null;
|
||||||
LogK.e("1111111111111111");
|
// } catch (ClassNotFoundException e) {
|
||||||
return null;
|
// Log.e("Reflection", "PermissionUtils class not found", e);
|
||||||
} catch (ClassNotFoundException e) {
|
// } catch (NoSuchMethodException e) {
|
||||||
Log.e("Reflection", "PermissionUtils class not found", e);
|
// Log.e("Reflection", "getCachePermission method not found", e);
|
||||||
} catch (NoSuchMethodException e) {
|
// } catch (IllegalAccessException e) {
|
||||||
Log.e("Reflection", "getCachePermission method not found", e);
|
// Log.e("Reflection", "Illegal access to method", e);
|
||||||
} catch (IllegalAccessException e) {
|
// } catch (InvocationTargetException e) {
|
||||||
Log.e("Reflection", "Illegal access to method", e);
|
// Log.e("Reflection", "Method invocation failed", e);
|
||||||
} catch (InvocationTargetException e) {
|
// } catch (Exception e) {
|
||||||
Log.e("Reflection", "Method invocation failed", e);
|
// Log.e("Reflection", "Unexpected error", e);
|
||||||
} catch (Exception e) {
|
// }
|
||||||
Log.e("Reflection", "Unexpected error", e);
|
// return null;
|
||||||
}
|
// }
|
||||||
return null;
|
//
|
||||||
}
|
// public static List<IPermission> convertToIPermissionArray(String[] permissions) {
|
||||||
|
// // 将String[]转换为List<IPermission>
|
||||||
public static List<IPermission> convertToIPermissionArray(String[] permissions) {
|
// List<IPermission> permissionList = new ArrayList<>();
|
||||||
// 将String[]转换为List<IPermission>
|
//
|
||||||
List<IPermission> permissionList = new ArrayList<>();
|
// if (permissions == null || permissions.length == 0) {
|
||||||
|
// return permissionList;
|
||||||
if (permissions == null || permissions.length == 0) {
|
// }
|
||||||
return permissionList;
|
// for (int i = 0; i < permissions.length; i++) {
|
||||||
}
|
// String permission = permissions[i];
|
||||||
for (int i = 0; i < permissions.length; i++) {
|
// // 1. 尝试通过反射获取缓存的IPermission
|
||||||
String permission = permissions[i];
|
// IPermission cachedPermission = invokeGetCachePermission(permission);
|
||||||
LogK.e("permission="+permission);
|
// if (cachedPermission != null) {
|
||||||
// 1. 尝试通过反射获取缓存的IPermission
|
// permissionList.add(cachedPermission);
|
||||||
IPermission cachedPermission = invokeGetCachePermission(permission);
|
// }
|
||||||
if (cachedPermission != null) {
|
// }
|
||||||
permissionList.add(cachedPermission);
|
// return permissionList;
|
||||||
}
|
// }
|
||||||
}
|
//
|
||||||
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)));
|
||||||
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)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -12,10 +12,9 @@ import android.widget.LinearLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import com.hjq.permissions.XXPermissions;
|
import com.hjq.permissions.XXPermissions;
|
||||||
import com.hjq.permissions.permission.base.IPermission;
|
import com.hjq.permissions.permission.PermissionLists;
|
||||||
import com.tfq.demo.R;
|
import com.tfq.demo.R;
|
||||||
import com.tfq.library.base.BaseActivity;
|
import com.tfq.library.base.BaseActivity;
|
||||||
import com.tfq.library.permission.PermissionUtils;
|
|
||||||
import com.tfq.library.utils.LogK;
|
import com.tfq.library.utils.LogK;
|
||||||
import com.tfq.library.utils.ToasterUtil;
|
import com.tfq.library.utils.ToasterUtil;
|
||||||
|
|
||||||
|
|
@ -82,9 +81,7 @@ public class Activity_Font extends BaseActivity {
|
||||||
selectedScaleIndex(4);
|
selectedScaleIndex(4);
|
||||||
}
|
}
|
||||||
|
|
||||||
IPermission iPermission = PermissionUtils.invokeGetCachePermission(Manifest.permission.WRITE_SETTINGS);
|
boolean granted = XXPermissions.isGrantedPermission(this, PermissionLists.getWriteSettingsPermission());
|
||||||
assert iPermission != null;
|
|
||||||
boolean granted = XXPermissions.isGrantedPermission(this, iPermission);
|
|
||||||
if (!granted) {
|
if (!granted) {
|
||||||
ll_perssion.setVisibility(View.VISIBLE);
|
ll_perssion.setVisibility(View.VISIBLE);
|
||||||
}
|
}
|
||||||
|
|
@ -96,9 +93,7 @@ public class Activity_Font extends BaseActivity {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onClick(View view) {
|
private void onClick(View view) {
|
||||||
IPermission iPermission = PermissionUtils.invokeGetCachePermission(Manifest.permission.WRITE_SETTINGS);
|
boolean granted = XXPermissions.isGrantedPermission(this, PermissionLists.getWriteSettingsPermission());
|
||||||
assert iPermission != null;
|
|
||||||
boolean granted = XXPermissions.isGrantedPermission(this, iPermission);
|
|
||||||
int viewId = view.getId();
|
int viewId = view.getId();
|
||||||
|
|
||||||
if (viewId == R.id.iv_back) {
|
if (viewId == R.id.iv_back) {
|
||||||
|
|
|
||||||
|
|
@ -19,4 +19,7 @@ android.useAndroidX=true
|
||||||
android.enableJetifier=true
|
android.enableJetifier=true
|
||||||
|
|
||||||
useLocal=false
|
useLocal=false
|
||||||
# useLocal=false # ????????????
|
# useLocal=false # ???????????
|
||||||
|
|
||||||
|
# 指定Java 17的路径
|
||||||
|
org.gradle.java.home=C:/Users/123/.jdks/ms-21.0.8
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -1 +1 @@
|
||||||
304826bd11e9614142ecd6345b5a6680
|
8484d44231bc0a42d661517b25bcf324
|
||||||
|
|
@ -1 +1 @@
|
||||||
0696947ead6e87bacf305f13922505aa927c0932
|
cbb875fe2eed61f4175f5d06b03701b69e6b0ab9
|
||||||
|
|
@ -1 +1 @@
|
||||||
36f3d8b6a99ff5b00a62b0dc0d87b1100a8425c3b3385446998fe7cfe93ac6d1
|
2115630d449cbe8977ce7d33a093b5e7c0d5342574e78ef4a721a4de41a22a5b
|
||||||
|
|
@ -1 +1 @@
|
||||||
4a4c5bb3f49e44b95fc07bee60b9088c295a319b0bf2d868761d11a7d7068c1b6e45c7fc51ed34edbfccb1e43070b0675758f0ad8093f4d824fdf01753b35501
|
aff9f0a6f957794a8551d622e37b202256d5e24ed3ee14c3be8c500461dc4b2f456dadc7235b83938ed40431413a8e438ed9becc76f39624cf9f9005a16507ec
|
||||||
|
|
@ -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>20251120080338</lastUpdated>
|
<lastUpdated>20251120082435</lastUpdated>
|
||||||
</versioning>
|
</versioning>
|
||||||
</metadata>
|
</metadata>
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
2e9274ee9bfe3ae9684d844f3f5e4f39
|
c0eb4b622c9b34b5ed5b2a7f35607749
|
||||||
|
|
@ -1 +1 @@
|
||||||
383ccc9dc24b76213b99acadc58e972486e84339
|
5f09b653ebd212a50527b8f7c0090da8a08d53db
|
||||||
|
|
@ -1 +1 @@
|
||||||
8cda9377a8fd92e350167b3a6bf85354a2ff3aa3673c09cd522d8f5555eccd9d
|
9832aa356914d02dbfb6fb17707e35b8907ee1b732decb2e084d6b6ac1fae916
|
||||||
|
|
@ -1 +1 @@
|
||||||
e52c69c4171259a8989e2ed833809b696eae3ed2789d5792995592b64d684ba4949ca67d4af3649d00e44770c0b32ed69f60bdd8644e153fc1879419787c891c
|
c6644c0c74578920dbcabc210653858b599728a5fafcfc8d6aa6aa434e7fa1df9091648b8bf625e142acc0ce9ddfc059188c3f81fc683cb4007a604c8592429b
|
||||||
Loading…
Reference in New Issue