Android 使用ARouter 實現登陸攔截

引言

App都是由大量的頁面構成,部分頁面用戶能夠以遊客身份進行瀏覽,可是還有部分頁面大都須要用戶登陸後才能夠瀏覽。這時候就須要判斷當前用戶是否登陸,若是用戶未登陸,則須要先登陸;若是用戶已經登陸,則能夠直接跳轉。相似實現方式以下:bash

if(LoginUtils.getInstance().isLogin()){
        startActivity(new Intent(context,DetailActivity.class));
    }else{
        startActivity(new Intent(context,LoginActivity.class));
    }
複製代碼

可是若是一個App有大量的頁面進入的先行條件都是用戶已經登陸,這樣就容易形成大量的代碼冗餘,不易後期維護,咱們能夠經過AOP實現方式來處理。因爲項目中使用了ARouter路由框架,能夠經過其攔截器來處理這個問題。框架

經過ARouter IInterceptor實現登陸攔截

攔截器ide

@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) {

    }
}
複製代碼

跳轉post

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();
    }
}
複製代碼
相關文章
相關標籤/搜索