android – Nougat版本的快捷方式

前端之家收集整理的这篇文章主要介绍了android – Nougat版本的快捷方式前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当我尝试在Intent包中传递Serializable时,我正在捕获这个致命的异常,我认为这与我正在尝试实现的nougat快捷方式有关.这里例外:
12-16 16:17:32.972 20461-20461/***.****.******.debug E/AndroidRuntime: FATAL EXCEPTION: main
Process: ***.****.******.debug,PID: 20461
java.lang.IllegalArgumentException: Bad value in PersistableBundle key=shortcutId value=***.****.******.common.cta.CtaAccountSectionModel@1fb70dc
at android.os.PersistableBundle.<init>(PersistableBundle.java:124)
at android.os.PersistableBundle.<init>(PersistableBundle.java:98)
at android.content.pm.ShortcutInfo.fixUpIntentExtras(ShortcutInfo.java:267)
at android.content.pm.ShortcutInfo.<init>(ShortcutInfo.java:245)
 at android.content.pm.ShortcutInfo.<init>(ShortcutInfo.java)
 at android.content.pm.ShortcutInfo$Builder.build(ShortcutInfo.java:1027)
 at ****.******.***.ShortcutHelper.createShortcut(ShortcutHelper.java:79)
 at ****.******.***.ShortcutHelper.refreshShortcuts(ShortcutHelper.java:87)
 at ****.******.***.****.******.***.refreshShortcuts(Application.java:93)
 at ****.******.***.refreshShortcuts(SettingActivity.java:247)
 at ****.******.***.storeShortcuts(SettingActivity.java:242)
 at c****.******.***.access$800(SettingActivity.java:56)
 at ****.******.***.SettingActivity$2.onClick(SettingActivity.java:233)
 at android.view.View.performClick(View.java:5637)
 at android.view.View$PerformClick.run(View.java:22429)
 at android.os.Handler.handleCallback(Handler.java:751)
 at android.os.Handler.dispatchMessage(Handler.java:95)
 at android.os.Looper.loop(Looper.java:154)
 at android.app.ActivityThread.main(ActivityThread.java:6119)
 at java.lang.reflect.Method.invoke(Native Method)
 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

CtaAccountSectionModel.class

public class CtaAccountSectionModel extends CtaModel implements Serializable         {
}

CtaModel.class

@JsonTypeInfo(
            use = JsonTypeInfo.Id.NAME,include = JsonTypeInfo.As.PROPERTY,defaultImpl = CtaDefaultModel.class,property = "action",visible = true)
    @JsonSubTypes({
            @JsonSubTypes.Type(value = CtaProductPageModel.class,name = CtaActionModel.ACTION_PRODUCT_PAGE))})


public class CtaModel implements Serializable {
   private String action;
   private String name;
    public String getAction() {
        return action;
    }

    public void setAction(String action) {
        this.action = action;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

这里的代码我创建了intent:

public ShortcutBackStackBuilder getHistoryWithBackStack(String section) {
    Intent intent = IntentAppFactory.createMainActivityFromShortcut(mContext).putExtra(IntentExtraConstants.EXTRA_SHORTCUT_ID,new CtaAccountSectionModel(section))
        .setAction(Intent.ACTION_MAIN);

        mIntentLinkedList.add(intent);
        return this;
}

任何人都知道是否不允许在牛轧糖快捷方式中传递Serializable?

解决方法

PersistableBundle类使用以下方法检查其内容
public static boolean isValidType(Object value) {
    return (value instanceof Integer) || (value instanceof Long) ||
            (value instanceof Double) || (value instanceof String) ||
            (value instanceof int[]) || (value instanceof long[]) ||
            (value instanceof double[]) || (value instanceof String[]) ||
            (value instanceof PersistableBundle) || (value == null) ||
            (value instanceof Boolean) || (value instanceof boolean[]);
}

所以不幸的是,只有这些类可以捆绑到Intent for Shortcuts中.

来源:PersistableBundle.java

猜你在找的Android相关文章