2012-03-15 34 views
2

我的應用程序將(可選)在執行操作時發送社交媒體更新。爲ACTION_SEND文本明智地設置默認應用程序(通過選配器,首選項等)

我想通過使用用戶安裝的社交媒體應用程序來做到這一點。我不想限制用戶使用任何特定的應用程序,因此任何可以響應ACTION_SEND意圖的類型爲text/plain的應用程序都可以。但是,我不希望用戶每次都必須選擇 - 通常,他們每次都會使用同一個應用程序,也就是說,一旦他們選擇了TweetCaster/Facebook /無論什麼時候,他們都會堅持下去。

如果我只是startActivity()ACTION_SENDtext/plain,我得到一個「完成操作使用」選擇器,並且還有一個「此操作默認使用」複選框。

但是,這將爲所有應用程序的意圖設置默認值,並且似乎(a)某人可能已經違約到非社交媒體應用程序發送文本,並且(b)即使他們沒有,似乎有點「粗魯」,默認這樣的一般意圖發送一些文本的地方。

人們通常在這裏做什麼?我做了一個ListPreference,可以選擇一個特定的應用程序(所以我可以在一個應用程序中選擇我的應用程序,而不是系統範圍),但它看起來像很多代碼簡單。

我錯過了更明顯的東西嗎?有沒有辦法啓動選擇器,以便「默認使用此操作」僅用作默認操作我的應用程序ACTION_SENDing text/plain?

回答

1

觸發它是否有生火的選擇器,使得「在默認情況下此操作使用」的方式只會被用作默認針對我的應用ACTION_SENDing文本/純文本的操作?

不,對不起。這就是爲什麼大多數ACTION_SEND示例使用Intent.createChooser()來顯示,以消除「使其成爲默認」複選框並忽略用戶可能已設置的任何系統範圍默認值的原因之一。

而不是去的ListPreference路線,你可以用自己的「默認」的邏輯創建你自己的選擇器AlertDialog(或對話主題Activity)。這種「默認」可以是:

  • 一個特定的選擇,以及系統級的線「設爲默認值」
  • 基於行爲(例如,將您的列表變成「經常使用的」和「其他」選項)
  • 基於別的東西在用戶之中(總體行爲的,月亮的相位等)

創建一個‘超級選擇器’有這種功能是一箇中檔我癢癢的是,如果沒有人能夠勝任我的話,今年我可能會刮傷。

+0

謝謝。進一步研究它,我認爲以對話爲主題的活動的建議可能比我要標題更清晰 - 無論是創建自定義選擇器,還是僅僅作爲構建看起來像ListPreference的更好方法,但是允許在首選項中選擇應用程序。 (ListPreference實際上並不像它被設計爲以我彎曲的方式被濫用,所以我認爲從頭開始似乎更明智。) – 2012-03-15 14:20:31

1

如果您在沒有目標的情況下觸發了像ACTION_SEND這樣的意圖,那麼您無法確定應用程序處理該事件的方式。 Android需要在未來處理更好。

實現此功能的最佳方法是使用ActionBar share button。他們堅持最後選擇的應用程序,一旦你使用了這個動作,你只需要再次按下它來分享新的東西。

如果你不想通過ActionBar做到這一點,那麼你將不得不做的是你開始做的 - 獲取所有可以處理ACTION_SEND的應用程序列表,並將該應用程序用作你的目標的目標。

我錯過了更明顯的東西嗎?有沒有辦法啓動選擇器,使「默認使用此操作」將僅用作我的應用程序的默認操作ACTION_SENDing text/plain?

即選擇器是一個系統彈出,你不能訪問或觸發它。通過應用程序代碼無法設置首選活動,因爲您需要使用例如this

編輯:違揹我的信仰,你可以通過Intent.createChooser(Intent target, CharSequence title)

+0

不幸的是,行動酒吧似乎不適合我在做什麼。這是一個很長的故事,但我的應用程序主要通過音頻提示與用戶交互(可能在後臺,而應用程序甚至不在屏幕上),這使得交互設計有點不同尋常。我也瞄準API等級8,所以使用它意味着一些相對繁瑣的工作。 +1指向我,但我可以看到它在其他情況下很有用。 – 2012-03-15 14:13:43

相關問題