引言
App都是由大量的页面构成,部分页面用户可以以游客身份进行浏览,但是还有部分页面大都需要用户登录后才可以浏览。这时候就需要判断当前用户是否登录,如果用户未登录,则需要先登录;如果用户已经登录,则可以直接跳转。类似实现方式如下:
if(LoginUtils.getInstance().isLogin()){
startActivity(new Intent(context,DetailActivity.class));
}else{
startActivity(new Intent(context,LoginActivity.class));
}
复制代码
但是如果一个App有大量的页面进入的先行条件都是用户已经登录,这样就容易造成大量的代码冗余,不易后期维护,我们可以通过AOP实现方式来处理。由于项目中使用了ARouter路由框架,可以通过其拦截器来处理这个问题。
通过ARouter IInterceptor实现登录拦截
拦截器
@Interceptor(priority = 8, name = "login")
public class LoginInterceptorImpl implements IInterceptor {
@Override
public void process(Postcard postcard, InterceptorCallback callback) {
String path = postcard.getPath();
LogUtils.d(path);
boolean isLogin = SPUtils.getInstance().getBoolean(Constant.SP_IS_LOGIN, false);
if(isLogin){
callback.onContinue(postcard);
}else{
switch (path){
// 需要登录的直接进入这个页面
case PageRouter.TEST_A:
case PageRouter.TEST_B:
callback.onInterrupt(null);
break;
// 不需要登录的直接拦截下来
default:
callback.onContinue(postcard);
break;
}
}
}
@Override
public void init(Context context) {
}
}
复制代码
跳转
public class LoginNavigationCallbackImpl implements 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) {
String path = postcard.getPath();
Bundle bundle = postcard.getExtras();
ARouter.getInstance().build(PageRouter.MINE_LOGIN)
.with(bundle)
.withString("path", path)
.navigation();
}
}
最后
如果你看到了这里,觉得文章写得不错就给个赞呗!欢迎大家评论讨论!如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足,定期免费分享技术干货。喜欢的小伙伴可以关注一下哦。谢谢!