ARouter 与 IProvider服务调用,IInterceptor登陆拦截

参考:

xingfu0809 / ArouterLogin : 基于Arouter的登录拦截

IProvider

base模块 : 定义服务接口
import com.alibaba.android.arouter.facade.template.IProvider;

public interface IModuleService extends IProvider {
    /**
     * 获取用户名
     *
     * @return 用户名
     */
    String getUserName();

}
user模块 : 实现服务接口
import android.content.Context;

import com.alibaba.android.arouter.facade.annotation.Route;

@Route(path = "/user/user_service")
public class UserServiceImpl implements IModuleService {
    @Override
    public String getUserName() {
        return "xq";
    }

    @Override
    public void init(Context context) {

    }
}

video模块 : 调用服务
//通过path调用服务
String userName1 = ((IModuleService) ARouter.getInstance()
        .build("/user/user_service")
        .navigation()).getUserName();

//通过类名调用服务
String userName2 = ARouter.getInstance()
        .navigation(IModuleService.class)
        .getUserName();

我们还可以在base中处理,然后在调用:

base模块:

import com.alibaba.android.arouter.launcher.ARouter;

public class ModuleServiceFinder {

    public static String getUserName() {
        IModuleService iModuleService = ARouter.getInstance()
                .navigation(IModuleService.class);
        if (iModuleService != null) {
            return iModuleService.getUserName();
        }
        return "";
    }

}

video模块 :调用服务


//通过base调用服务
String userName3 = ModuleServiceFinder.getUserName();

IInterceptor

定义拦截器
import android.content.Context;

import com.alibaba.android.arouter.facade.Postcard;
import com.alibaba.android.arouter.facade.callback.InterceptorCallback;
import com.alibaba.android.arouter.facade.template.IInterceptor;

public class LoginInterceptorImpl implements IInterceptor {

    @Override
    public void process(Postcard postcard, InterceptorCallback callback) {
        boolean login = UserCenter.isLogin();
        if (login) {
            //已登陆不拦截
            callback.onContinue(postcard);
        } else {
            String path = postcard.getPath();
            switch (path) {
                //不需要登陆直接进入界面
                case "/video/main":
                case "/picture/main":
                    callback.onContinue(postcard);
                    break;
                default:
                    //需要登陆拦截
                    callback.onInterrupt(null);
                    break;
            }
        }
    }

    @Override
    public void init(Context context) {

    }
}

ReadActivity : 需要登陆的界面

ARouter.getInstance()
        .build("/read/main")
        .withString("msg","我是传递到read activity的数据")
        .navigation(this, new NavigationCallback() {
            //找到了
            @Override
            public void onFound(Postcard postcard) {

            }

            //找不到了
            @Override
            public void onLost(Postcard postcard) {

            }

            //跳转成功了
            @Override
            public void onArrival(Postcard postcard) {

            }

            //被拦截了
            @Override
            public void onInterrupt(Postcard postcard) {
                //跳转到登陆,
                //把参数和path都传递到登陆页,登陆完成后再跳转
                String path = postcard.getPath();
                Bundle extras = postcard.getExtras();
                ARouter.getInstance()
                        .build("/login/main")
                        .with(extras)
                        .withString("path", path)
                        .navigation();
            }
        });


LoginActivity : 登陆界面


@Autowired
public String path = "";


//登陆后
if (!TextUtils.isEmpty(path)) {
    ARouter.getInstance()
            //传递过来的路径
            .build(path)
            //传递过来的参数
            .with(getIntent().getExtras())
            .navigation();
}
finish();
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值