2013-03-07 55 views
1

我正在实施一个选项,从我的应用程序共享内容。当用户按下分享按钮时,执行以下代码。ACTION_SEND意图与自定义额外导致其他应用程序崩溃

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

我设置为我的意图一个特殊的额外的,那就是反对wish巫实现Parcelable接口。

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

但问题是,当我包含我的Parcable对象时,所有其他流行应用程序(Facebook,Twitter,...)和内置应用程序(消息传递)都会崩溃。这不是我的应用程序崩溃,其他应用程序正在抛出quit unexpectedly错误。

当我打电话给我的SharingActivity带有一些本活动未知的额外名称时,它不会崩溃。它只是忽略了额外的。

Wish object source code

上午我做错了什么还是什么? 这是不可能的,因为其他应用程序不知道我的Wish对象?

+1

发布您的logcat。你的'Parcelable'实现是不正确的,所以当试图解组对象时,其他应用会崩溃。 – 323go 2013-03-07 14:52:05

+0

是** text/plain **和** Parcelable **相同​​..?我认为你不能这样做.. – ngesh 2013-03-07 14:54:25

+0

没有什么显示在LogCat中。我相信其他应用程序无法解组对象,因为他们不知道它。但他们甚至不应该尝试。 @ngesh我怀疑是一样的。但我希望事实并非如此。 – pzagor2 2013-03-07 14:56:12

回答

1

但问题是,当我包含我的Parcable对象时,所有其他受欢迎的应用程序(Facebook,Twitter,...)和内置应用程序(消息传递)都会崩溃。

不要将自定义Parcelable对象传递给缺少Parcelable类定义的应用程序。

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

正确。

相反,传递一个标识符(字符串,int,等等)是SharingActivity可以使用你的Wish从中央数据模型发现。

或者,代替创建自定义Wish,请使用Bundle来表示“愿望”,因为Bundle在所有应用程序中都有一个通用的类定义。

+0

Tnx。我刚刚测试过,Bundle版本很好。 – pzagor2 2013-03-07 15:40:47

0

您可以将您的数据放在一个包中,并将其与意图一起发送。 例如:

Bundle b = new Bundle(); 
b.putParcelable("object_key", yourObject); 
shareIntent.putExtra("bundle_key", b);