Shortcuts for the Nougat version

I will catch this fatal exception when I try to pass a Serializable inside an Intent package, and I think this is due to the nougat shortcuts I'm trying to implement. here is the exception:

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; } } 

Here is the code here I created the 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; } 

Does anyone know if it is not allowed to pass Serializable in nougat shortcuts?

+6
source share
1 answer

The PersistableBundle class validates its contents with the following method:

 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[]); } 

So, unfortunately, only these classes can be combined in Intent for shortcuts.

source: PersistableBundle.java

+12
source

Source: https://habr.com/ru/post/1013348/


All Articles