Android 操作\u使用自定义附加程序发送意图,导致其他应用程序崩溃

Android 操作\u使用自定义附加程序发送意图,导致其他应用程序崩溃,android,android-intent,Android,Android Intent,我正在实现一个从我的应用程序共享内容的选项。当用户按下共享按钮时,执行以下代码 public static void openShareIntent(Context context, String text, Wish wish) { Intent share = new Intent(Intent.ACTION_SEND); share.setType("text/plain"); share.putExtra(Intent.EXTRA_TEXT, tex

我正在实现一个从我的应用程序共享内容的选项。当用户按下共享按钮时,执行以下代码

public static void openShareIntent(Context context, String text, Wish wish)
{
    Intent share = new Intent(Intent.ACTION_SEND);
    share.setType("text/plain");       
    share.putExtra(Intent.EXTRA_TEXT, text);
    share.putExtra("share_wish", wish);

    startIntent(context, share);
}
我正在为我的意图设置一个特殊的额外选项,即object
wish
witch实现
Parcelable
接口

此对象包含一些额外的信息。如果用户从可用的应用程序中选择我的应用程序(当前应用程序实际共享内容)以共享
text/plain
,我希望使用此信息

但问题是,当我包含我的
Parcable
对象时,所有其他流行应用(Facebook、Twitter等)和内置应用(消息传递)都会崩溃。崩溃的不是我的应用程序,而是其他应用程序抛出了
意外退出
错误

当我用这个活动不知道的额外名称调用我的
SharingActivity
时,它不会崩溃。它只是忽略了额外的

我做错什么了吗? 这是否因为其他应用程序不知道我的
愿望
对象而不可能

但问题是,当我包含我的可包裹对象时,所有其他流行应用(Facebook、Twitter等)和内置应用(消息传递)都会崩溃

切勿将自定义的
Parcelable
对象传递给缺少
Parcelable
类定义的应用程序

这是不可能的,因为其他应用程序不知道我的愿望对象

相反,传递一个标识符(字符串,
int
,无论什么),该标识符可用于
SharingActivity
从中心数据模型中查找您的
愿望

或者,不要创建自定义的
愿望
,而是使用
捆绑包
来表示“愿望”,因为
捆绑包
在所有应用程序中都有一个通用的类定义

但问题是,当我包含我的可包裹对象时,所有其他流行应用(Facebook、Twitter等)和内置应用(消息传递)都会崩溃

切勿将自定义的
Parcelable
对象传递给缺少
Parcelable
类定义的应用程序

这是不可能的,因为其他应用程序不知道我的愿望对象

相反,传递一个标识符(字符串,
int
,无论什么),该标识符可用于
SharingActivity
从中心数据模型中查找您的
愿望


或者,不要创建自定义的
愿望
,而是使用
捆绑包
来表示“愿望”,因为
捆绑包
在所有应用程序中都有一个通用的类定义。

您可以将数据放在捆绑包中,并有意发送。 例如:


你可以把你的数据放在一个包里,并有目的地发送它。 例如:


张贴日志。您的
Parcelable
实现很有可能不正确,因此其他应用程序在尝试解组对象时崩溃。text/plain和Parcelable是否相同。。?我认为你做不到,LogCat里什么都没有。我确信其他应用程序无法解组对象,因为他们不知道。但他们甚至不应该尝试@我想也是这样。但我希望不是这样。看看这个,包裹是否在你的应用程序中工作并不重要。一旦你将意图发送出你的应用程序,你就跨越了流程边界,你需要提供适当的AIDL,以便其他流程可以解除对它的控制。在没有检查的情况下,我似乎记得Android试图在收到意图时解组额外的内容,因此可能会失败。发布日志。您的
Parcelable
实现很有可能不正确,因此其他应用程序在尝试解组对象时崩溃。text/plain和Parcelable是否相同。。?我认为你做不到,LogCat里什么都没有。我确信其他应用程序无法解组对象,因为他们不知道。但他们甚至不应该尝试@我想也是这样。但我希望不是这样。看看这个,包裹是否在你的应用程序中工作并不重要。一旦你将意图发送出你的应用程序,你就跨越了流程边界,你需要提供适当的AIDL,以便其他流程可以解除对它的控制。在没有检查的情况下,我似乎记得Android试图在收到意图时解组额外的内容,因此它可能会在那里失败。Tnx。我刚刚测试了捆绑包版本,一切正常。我刚刚测试过,捆绑版工作正常。
Bundle b = new Bundle();
b.putParcelable("object_key", yourObject);
shareIntent.putExtra("bundle_key", b);