注解类:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface CheckPermission {
String value();
int reqCode();
}
切点:
@Aspect
public class PermissionAspectj {
private final String TAG = "PermissionAspectj";
@Pointcut("execution(@com.yxkj.jzh.aop.annotation.CheckPermission * *(..)) && @annotation(permission)")
public void requestPermission(CheckPermission permission) {
}
@Around("requestPermission(permission)")
public Object check(ProceedingJoinPoint joinPoint, CheckPermission permission) throws Throwable {
Log.d(TAG, "check: " + permission.value());
if (null != permission) {
Context context = null;
try {
if (joinPoint.getThis() instanceof android.support.v4.app.Fragment) {
android.support.v4.app.Fragment fragment = (android.support.v4.app.Fragment) joinPoint.getThis();
context = fragment.getActivity();
} else {
context = (Context) joinPoint.getThis();
}
} catch (Exception e) {
e.printStackTrace();
}
if (null != context) {
String reqPermission = permission.value();
if (PermissionUtils.checkIsLackPermission(context, reqPermission)) {
int reqCode = permission.reqCode();
if (joinPoint.getThis() instanceof Activity) {
Activity activity = (Activity) joinPoint.getThis();
PermissionUtils.requestPermission(activity, reqPermission, reqCode);
} else if (joinPoint.getThis() instanceof android.support.v4.app.Fragment) {
Fragment fragment = (Fragment) joinPoint.getThis();
PermissionUtils.requestPermission(fragment, reqPermission, reqCode);
}
return null;
} else {
return joinPoint.proceed();
}
}
}
return joinPoint.proceed();
}
}