Android AOP网络检查

Android AOP网络检查

在这里插入图片描述

在这里插入图片描述

功能实现

定义注解

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface CheckNet {
    int SHOW_TIP = 1;
    int SHOW_DIALOG = 2;

    int value() default SHOW_TIP;
}

定义切面类

@Aspect
public class CheckNetAspect {

    @Pointcut("execution(@com.example.mylibrary.network.CheckNet * *(..))")
    public void method() {
    }

    @Around("method()")
    public void handleCheckNet(ProceedingJoinPoint joinPoint) throws Throwable {
        MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
        CheckNet checkNet = methodSignature.getMethod().getAnnotation(CheckNet.class);
        if (checkNet != null) {
            Object aThis = joinPoint.getThis();
            Context context = getContext(aThis);
            if (context != null && !isNetworkAvailable(context)) {
                if (checkNet.value() == CheckNet.SHOW_TIP) {
                    showTip(context);
                } else if (checkNet.value() == CheckNet.SHOW_DIALOG) {
                    showSettingDialog(context);
                }
                return;
            }
        }
        joinPoint.proceed();
    }

    /**
     * 显示提示
     */
    private void showTip(Context context) {
        Toast.makeText(context, "当前没有网络连接,请检查网络设置", Toast.LENGTH_SHORT).show();
    }

    /**
     * 显示弹窗
     */
    private void showSettingDialog(Context context) {
        new AlertDialog.Builder(context)
                .setMessage("当前没有网络连接,请检查网络设置")
                .setPositiveButton("设置", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        context.startActivity(new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS)
                                .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
                    }
                })
                .show();
    }

    /**
     * 判断网络是否能用
     */
    private boolean isNetworkAvailable(Context context) {
        ConnectivityManager manager = ContextCompat.getSystemService(context, ConnectivityManager.class);
        if (manager != null) {
            NetworkInfo info = manager.getActiveNetworkInfo();
            // 判断网络是否连接
            if (info == null || !info.isConnected()) {
                return false;
            }
        }
        return true;
    }

    /**
     * 获取Context对象
     */
    private Context getContext(Object object) {
        if (object instanceof Activity) {
            return (Activity) object;
        } else if (object instanceof Fragment) {
            Fragment fragment = (Fragment) object;
            return fragment.getActivity();
        } else if (object instanceof View) {
            View view = (View) object;
            return view.getContext();
        }
        return null;
    }
}

使用

@CheckNet()
private void getUserInfo() {
    Log.e(TAG, "获取用户信息");
}

@CheckNet(CheckNet.SHOW_DIALOG)
private void getUserInfo2() {
    Log.e(TAG, "获取用户信息2");
}

代码下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值