工具类1:LoginCarrier.java
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
/**
* 登录器载体
*/
public class LoginCarrier implements Parcelable {
public String mTargetAction;
public Bundle mbundle;
protected LoginCarrier(Parcel in) {
mTargetAction = in.readString();
mbundle = in.readBundle(Bundle.class.getClassLoader());
}
/**
* 重新构造函数 用于传参
* @param target 目标activity
* @param bundle 向目标传递的参数
*/
public LoginCarrier(String target, Bundle bundle) {
mTargetAction = target;
mbundle = bundle;
}
@Override
public int describeContents() {
return 0;
}
/**
* 通过writeToParcel将你的对象映射成Parcel对象
* @param dest
* @param flags
*/
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(mTargetAction);
dest.writeBundle(mbundle);
}
/**
* 已经登录的状态下执行的方法
* @param ctx
*/
public void invoke(Context ctx) {
Intent intent = new Intent();
intent.setClassName(ctx, mTargetAction);
if (mbundle != null) {
intent.putExtras(mbundle);
}
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
ctx.startActivity(intent);
}
public static final Creator<LoginCarrier> CREATOR = new Creator<LoginCarrier>() {
@Override
public LoginCarrier createFromParcel(Parcel in) {
return new LoginCarrier(in);
}
@Override
public LoginCarrier[] newArray(int size) {
return new LoginCarrier[size];
}
};
}
工具类2:LoginInterceptor.java
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import com.nativeTools.Config;
import com.vipcio.activity.LoginActivity;
/**
* 登录判断类
*/
public class LoginInterceptor {
// 这里获取登录状态
private static boolean getLogin() {
return Config.API.is_login;
}
/**
* @param ctx 当前activity的上下文
* @param target 目标activity
* @param bundle 需要传递的参数
* @param intent
*/
public static void interceptor(Context ctx, String target, Bundle bundle, Intent intent) {
if (target != null && target.length() > 0) {
LoginCarrier invoker = new LoginCarrier(target, bundle);
if (getLogin()) {
invoker.invoke(ctx);
}else{
if (intent == null) {
intent = new Intent(ctx, LoginActivity.class);
intent.putExtra(Config.API.loginInterceptorInvoker, invoker);
}
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
ctx.startActivity(intent);
}
}
}
public static void interceptor(Context ctx, String target, Bundle bundle) {
interceptor(ctx, target, bundle, null);
}
}
跳转拦截使用:
Bundle bun = new Bundle();
bun.putString("name","大黑");
LoginInterceptor.interceptor(activity, "目标Activity的名字", bun);
登录成功后的操作:
LoginCarrier invoker = (LoginCarrier) getIntent().getParcelableExtra(Config.API.loginInterceptorInvoker);
invoker.invoke(LoginActivity.this);
finish();
总结:
注意 Config.API.loginInterceptorInvoker 是个常量字符串, 想定义什么值都行