2013-03-07 56 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);