參考:
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();