From 1ca2c31e3dbbdb72c5f91196d7693dcbcbfa49e9 Mon Sep 17 00:00:00 2001 From: moguangjian <644297659@qq.com> Date: Wed, 19 Sep 2018 13:35:50 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=90=AB=E6=9C=89Context/Fra?= =?UTF-8?q?gment=E7=9A=84=E6=99=AE=E9=80=9A=E7=B1=BB=E4=B9=9F=E5=8F=AF?= =?UTF-8?q?=E4=BB=A5=E4=BD=BF=E7=94=A8=E6=B3=A8=E8=A7=A3=E5=88=A4=E6=96=AD?= =?UTF-8?q?=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/vaop/PermissionAspect.java | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/vaop-runtime/src/main/java/vaop/PermissionAspect.java b/vaop-runtime/src/main/java/vaop/PermissionAspect.java index 9a99cfb..9b286d4 100644 --- a/vaop-runtime/src/main/java/vaop/PermissionAspect.java +++ b/vaop-runtime/src/main/java/vaop/PermissionAspect.java @@ -11,6 +11,11 @@ import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + import vaop.annotation.Permission; @Aspect @@ -32,6 +37,14 @@ public void interceptPermissionRequest(final ProceedingJoinPoint joinPoint, fina context = ((Fragment) object).getActivity(); } + if (context == null) { + try { + context = getContext(joinPoint.getThis()); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } + if (context == null) { Log.e("interceptPermission", "UnKnown Context"); return; @@ -56,4 +69,28 @@ public void interceptPermissionRequest(final ProceedingJoinPoint joinPoint, fina } }); } + + private Context getContext(Object object) throws IllegalAccessException { + List fieldList = new ArrayList<>(); + Class tempClass = object.getClass(); + while (tempClass != null && !tempClass.equals(Object.class)) { + fieldList.addAll(Arrays.asList(tempClass.getDeclaredFields())); + tempClass = tempClass.getSuperclass(); + } + + for (Field field : fieldList) { + field.setAccessible(true); + if (field.get(object) instanceof Context) { + return (Context) field.get(object); + + } else if (field.get(object) instanceof android.support.v4.app.Fragment) { + return ((android.support.v4.app.Fragment) field.get(object)).getActivity(); + + } else if (field.get(object) instanceof android.app.Fragment) { + return ((android.app.Fragment) field.get(object)).getActivity(); + } + } + + return null; + } } \ No newline at end of file