Android实现中转Activity

Android实现中转Activity,什么意思呢?就是我要去打开C界面,然后需要经过B这个界面,B界面就是中转Activity

  • 这样的Activity能实现什么功能呢?
    • 比如A去C界面,必须要用户去B页面登陆完成,然后才能去C界面【拦截功能】
  • 实现该功能的方案?
    • 记住跳转Intent意图,从哪里来去哪儿,就让他继续下去【携带意图】
    • EventBus、回调、委托,等等,传值的方案 登陆成功之后调用跳转代码 【观察监听】

目前本文只讨论第一种实现方案


主要实现方案如下

跳转时调用的方法

判断当前是否满足中转Activity条件,如果不满足

  • 使用 ToClassName 参数记住要跳转的目的class
  • 修改 Component 跳转至 中转activity
1
2
3
4
5
6
7
8
9
10
11
public void startActivityAfterLogin(Intent intent) {
//未登录
if (!isLogin) {
ComponentName componentName = new ComponentName(Activity, LoginActivity.class);
intent.putExtra("ToClassName", intent.getComponent().getClassName());
intent.setComponent(componentName);
super.startActivity(intent);
} else {
startActivity(intent);
}
}

登录界面的方法

在中转界面,满足了跳转条件之后

  • 在关闭中转activity之前通过判断当前Activity是否有携带ToClassName参数

  • 如果携带ToClassName参数,则实现修改Component为目的地Activity,然后继续执行跳转

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     private void startActivity() {
    if (getIntent().getExtras() != null && getIntent().getExtras().getString("ToClassName") != null) {
    String ToClassName = getIntent().getExtras().getString("ToClassName");
    getIntent().removeExtra("ToClassName");
    if (ToClassName != null && !ToClassName.equals(Activity.getClass().getName())) {
    try {
    ComponentName componentName = new ComponentName(Activity, Class.forName(ToClassName));
    startActivity(getIntent().setComponent(componentName));
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    }
    }
    }
    finish();
    }

    其他情况

    • fragment 的方式可同理实现