添加简单的页面快速跳转功能

This commit is contained in:
juntao
2020-08-11 10:38:14 +08:00
parent 1b946c325c
commit e80b198aa5
4 changed files with 107 additions and 3 deletions

View File

@ -1,17 +1,31 @@
package com.gh.common.util;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.os.Parcelable;
import android.text.TextUtils;
import androidx.appcompat.app.AppCompatActivity;
import com.gh.common.avoidcallback.AvoidOnResultManager;
import com.gh.common.avoidcallback.Callback;
import com.gh.gamecenter.BuildConfig;
import com.gh.gamecenter.MainActivity;
import com.gh.gamecenter.NormalActivity;
import com.gh.gamecenter.SplashScreenActivity;
import com.gh.gamecenter.normal.NormalFragment;
import com.halo.assistant.HaloApp;
import com.lightgame.utils.Utils;
import androidx.appcompat.app.AppCompatActivity;
import org.json.JSONObject;
import java.util.Iterator;
import java.util.Set;
import javax.annotation.Nullable;
/**
* @author CsHeng
@ -27,6 +41,7 @@ public class EntranceUtils {
public static final String KEY_GAMEID = "gameId";
public static final String KEY_ID = "id";
public static final String KEY_URL = "url";
public static final String KEY_BUNDLE = "bundle";
public static final String KEY_GAMENAME = "gameName";
public static final String KEY_PACKAGE_MD5 = "package_md5";
public static final String HOST_ARTICLE = "article";
@ -231,4 +246,77 @@ public class EntranceUtils {
context.startActivity(SplashScreenActivity.getSplashScreenIntent(context, bundle));
}
}
public static void saveShortcut(String activityName, @Nullable Bundle bundle) {
if (BuildConfig.DEBUG) {
JSONObject json = new JSONObject();
if (activityName.contains("MainActivity")) {
SPUtils.setString(EntranceUtils.KEY_BUNDLE, "");
return;
}
if (bundle == null) bundle = new Bundle();
try {
Set<String> keys = bundle.keySet();
json.put(KEY_TO, activityName);
for (String key : keys) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Object object = bundle.get(key);
if (object instanceof Parcelable) {
String parcelableName = key + ":parcelable";
String parcelableType = object.getClass().getName();
String objectJsonString = GsonUtils.toJson(object);
JSONObject jObject = new JSONObject(objectJsonString);
json.put(parcelableName, parcelableType);
json.put(key, jObject);
} else {
json.put(key, JSONObject.wrap(bundle.get(key)));
}
}
}
Utils.toast(HaloApp.getInstance().getApplication(), "保存捷径成功");
SPUtils.setString(EntranceUtils.KEY_BUNDLE, json.toString());
} catch (Exception e) {
e.printStackTrace();
SPUtils.setString(EntranceUtils.KEY_BUNDLE, "");
}
}
}
public static void jumpShortcut(Activity activity) {
if (BuildConfig.DEBUG) {
if (!hasShortcut()) return;
Bundle bundle = new Bundle();
try {
JSONObject jsonObject = new JSONObject(SPUtils.getString(EntranceUtils.KEY_BUNDLE));
Iterator iter = jsonObject.keys();
String parcelableName = "";
while (iter.hasNext()) {
String key = (String) iter.next();
String value = jsonObject.getString(key);
if (key.contains(":parcelable")) {
parcelableName = value;
} else {
if (!TextUtils.isEmpty(parcelableName)) {
Class<?> gClass = Class.forName(parcelableName);
bundle.putParcelable(key, ((Parcelable) GsonUtils.fromJson(value, gClass)));
} else {
bundle.putString(key, value);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
jumpActivity(activity, bundle);
}
}
public static boolean hasShortcut() {
return !TextUtils.isEmpty(SPUtils.getString(EntranceUtils.KEY_BUNDLE));
}
}