在 Android App 中增加分享功能

App share to...

要在 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 就完成了: 程式碼:
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。
本文網址:http://blog.tonycube.com/2013/01/android-app.html
Tony Blog 撰寫,轉載時請註明出處及文章連結,謝謝 😀

2 則留言

  1. 請問我想要把一些選擇過濾掉,比如說Gmail之類的,僅保留LINE、WeChat及WhatsApp這些選擇,應該怎麼去實作呢

    回覆刪除
    回覆
    1. 我找到這篇
      http://stackoverflow.com/questions/9730243/how-to-filter-specific-apps-for-action-send-intent-and-set-a-different-text-for
      看起來是去檢查 package 名稱的方式來過濾要或不要的 App,你試試看吧~

      刪除

留言小提醒:
1.回覆時間通常在晚上,如果太忙可能要等幾天。
2.請先瀏覽一下其他人的留言,也許有人問過同樣的問題。
3.程式碼請先將它編碼後再貼上。(線上編碼:http://bit.ly/1DL6yog)
4.文字請加上標點符號及斷行,難以閱讀者恕難回覆。
5.感謝您的留言,您的問題也可能幫助到其他有相同問題的人。