gpt4 book ai didi

android - 如何将 Bundle 转换为 PersistableBundle?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:34:10 27 4
gpt4 key购买 nike

API21 发布了 PersistableBundle这是系统为各种目的保留的 bundle ( JobScheduler jobsShortcutInfos 等)。我想要一种简单的方法将旧代码中的 Bundle 转换为 PersistableBundle...我该怎么做?

最佳答案

这是一个实际将 Bundle 转换为 PersistableBundle 并返回的实用程序:

/**
* Creates a new {@link Bundle} based on the specified {@link PersistableBundle}.
*/
public static Bundle toBundle(PersistableBundle persistableBundle) {
if (persistableBundle == null) {
return null;
}
Bundle bundle = new Bundle();
bundle.putAll(persistableBundle);
return bundle;
}

/**
* Creates a new {@link PersistableBundle} from the specified {@link Bundle}.
* Will ignore all values that are not persistable, according
* to {@link #isPersistableBundleType(Object)}.
*/
public static PersistableBundle toPersistableBundle(Bundle bundle) {
if (bundle == null) {
return null;
}
PersistableBundle persistableBundle = new PersistableBundle();
for (String key : bundle.keySet()) {
Object value = bundle.get(key);
if (isPersistableBundleType(value)) {
putIntoBundle(persistableBundle, key, value);
}
}
return persistableBundle;
}

/**
* Checks if the specified object can be put into a {@link PersistableBundle}.
*
* @see <a href="https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/os/PersistableBundle.java#49">PersistableBundle Implementation</a>
*/
public static boolean isPersistableBundleType(Object value) {
return ((value instanceof PersistableBundle) ||
(value instanceof Integer) || (value instanceof int[]) ||
(value instanceof Long) || (value instanceof long[]) ||
(value instanceof Double) || (value instanceof double[]) ||
(value instanceof String) || (value instanceof String[]) ||
(value instanceof Boolean) || (value instanceof boolean[])
);
}

/**
* Attempts to insert the specified key value pair into the specified bundle.
*
* @throws IllegalArgumentException if the value type can not be put into the bundle.
*/
public static void putIntoBundle(BaseBundle baseBundle, String key, Object value) throws IllegalArgumentException {
if (value == null) {
throw new IllegalArgumentException("Unable to determine type of null values");
} else if (value instanceof Integer) {
baseBundle.putInt(key, (int) value);
} else if (value instanceof int[]) {
baseBundle.putIntArray(key, (int[]) value);
} else if (value instanceof Long) {
baseBundle.putLong(key, (long) value);
} else if (value instanceof long[]) {
baseBundle.putLongArray(key, (long[]) value);
} else if (value instanceof Double) {
baseBundle.putDouble(key, (double) value);
} else if (value instanceof double[]) {
baseBundle.putDoubleArray(key, (double[]) value);
} else if (value instanceof String) {
baseBundle.putString(key, (String) value);
} else if (value instanceof String[]) {
baseBundle.putStringArray(key, (String[]) value);
} else if (value instanceof Boolean) {
baseBundle.putBoolean(key, (boolean) value);
} else if (value instanceof boolean[]) {
baseBundle.putBooleanArray(key, (boolean[]) value);
} else if (value instanceof PersistableBundle) {
if (baseBundle instanceof PersistableBundle)
((PersistableBundle) baseBundle).putPersistableBundle(key, (PersistableBundle)value);
else if (baseBundle instanceof Bundle)
((Bundle) baseBundle).putBundle(key, toBundle((PersistableBundle) value));
} else {
throw new IllegalArgumentException("Objects of type " + value.getClass().getSimpleName()
+ " can not be put into a " + BaseBundle.class.getSimpleName());
}
}

您可以在 this gist 中找到完整的类和单元测试。 .

关于android - 如何将 Bundle 转换为 PersistableBundle?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45178006/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com