要在 App 中分享訊息到其他 App,例如 Facebook、Plurk、mail 或簡訊等等,可以有兩種做法,一種比較麻煩,必須去使用該平台所提供的 SDK 或 API,一個一個去實做,好處是可以使用比較多的功能,但缺點是開發者必須每個平台都實作,使用者才能使用,使用者能分享到哪個平台,取決於開發者是否實作該平台。
每個要分享的平台都實作對使用者來說也有個麻煩,那就是登入與授權的問題,當使用者要分享到某個平台時,例如臉書,會要求使用者輸入帳號密碼,並授權該 App 可以有發佈文章的權限等,有時對使用者是個麻煩。在 Android 中有個很好的機制,就是只要該 App 指定接收某些意圖,當其他 App 發出這些意圖時,該 App 就會收到這個意圖,如果有多個 App 都指定接收這個意圖時,Android 就會將這些 App 列出清單,使用者就可以自行選擇。
如此一來,開發者就不用每個平台都去實作,只要指定意圖即可,剩下的就讓其他 App 去處理。唯一的缺點就是,如果使用者沒有安裝該 App 例如臉書的 App,又或是該 App 沒有指定接收這類型的意圖,那使用者就沒辦法傳送資料給想要的平台。
這篇文章(AN IPHONE LOVER'S CONFESSION: I SWITCHED TO THE NEXUS 4. COMPLETELY.)的這個段落 CROSS-APP AND OS LEVEL INTEGRATION 就有提到,當他要分享某個在 email 中收到的檔案到社群網站時,在 iOS 裝置上是多麼的麻煩,在 Android 上相對簡單多了。
動手做
這個功能只要使用 Intent 指定其 Action ,然後建立 chooser 就完成了:- Action:android.content.Intent.ACTION_SEND
- Chooser:Intent.createChooser(Intent target, CharSequence title)
private void shareTo(String subject, String body, String chooserTitle) {
Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
sharingIntent.setType("text/plain");
sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, subject);
sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, body);
startActivity(Intent.createChooser(sharingIntent, chooserTitle));
}
基本上這個 method 是可以直接拿來用的,參數說明如下:
- subject:內容的標題。我實測的結果,有些 App 會忽略這個項目,所以建議不要放太重要的訊息。
- body:內容。想要分享的內容,可以放網址,有些 App 會自動轉成連結或直接下載縮圖。
- chooserTitle:選擇器的標題。當使用者的裝置中只有一個 App 能接收這個意圖時,就不會出現選擇器,而是直接打開該 App。
請問我想要把一些選擇過濾掉,比如說Gmail之類的,僅保留LINE、WeChat及WhatsApp這些選擇,應該怎麼去實作呢
回覆刪除我找到這篇
刪除http://stackoverflow.com/questions/9730243/how-to-filter-specific-apps-for-action-send-intent-and-set-a-different-text-for
看起來是去檢查 package 名稱的方式來過濾要或不要的 App,你試試看吧~
非常感謝 真的很好用 我成功把這個功能加進期末了 感恩
回覆刪除