Android登录判断,并且在登录后跳转到相应的Activity

时间:2022-09-24 08:51:31

工具类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  是个常量字符串, 想定义什么值都行