天天看點

【Android Training - 06】分享資料内容 [Lesson 1 - 發送分享的資料到其他App] Sending Content to Other Apps[發送需要分享的内容到其他App]

Sending Content to Other Apps[發送需要分享的内容到其他App]

  • 當你建構一個intent,你必須指定這個intent需要觸發的actions。Android定義了一些actions,包括ACTION_SEND,這個action表明着這個intent是用來從一個activity發送資料到另外一個activity的,甚至是跨程序之間的。
  • 為了發送資料到另外一個activity,你需要做的是指定資料與資料的類型,系統會識别出能夠相容接受的這些資料的activity并且把這些activity顯示給使用者進行選擇(如果有多個選擇),或者是立即啟動Activity(隻有一個相容的選擇)。同樣的,你可以在manifest檔案的Activity描述中添加接受哪些資料類型。
  • 在不同的程式之間使用intent來發送與接受資料是在社交分享内容的時候最常用的方法。Intent使得使用者用最常用的程式進行快速簡單的分享資訊。
  • 注意:為ActionBar添加功能的最好方法是使用ShareActionProvider,它能夠在API level 14以上進行使用。ShareActionProvider會在第三課中進行詳細介紹。

Send Text Content [分享文本内容]

  • ACTION_SEND的最直接與最常用的是從一個Activity發送文本内容到另外一個Activity。例如,Android内置的浏覽器可以把目前顯示頁面的URL作為文本内容分享到其他程式。這是非常有用的,通過郵件或者社交網絡來分享文章或者網址給好友。下面是一段Sample Code:
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");
sendIntent.setType("text/plain");
startActivity(sendIntent);
           
  • 如果裝置上有安裝某個能夠比對ACTION_SEND與MIME類型為text/plain程式,那麼Android系統會自動把他們都給篩選出來,并呈現Dialog給使用者進行選擇。如果你為intent調用了Intent.createChooser(),那麼Android總是會顯示可供選擇。這樣有一些好處:
    • 即使使用者之前為這個intent設定了預設的action,選擇界面還是會被顯示。
    • 如果沒有比對的程式,Android會顯示系統資訊。
    • 你可以指定選擇界面的标題。
  • 下面是更新後的代碼:
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");
sendIntent.setType("text/plain");
startActivity(Intent.createChooser(sendIntent, getResources().getText(R.string.send_to));
           
  • 效果圖如下:
【Android Training - 06】分享資料内容 [Lesson 1 - 發送分享的資料到其他App] Sending Content to Other Apps[發送需要分享的内容到其他App]
  • Optionally,你可以為intent設定一些标準的附加值,例如:EXTRA_EMAIL, EXTRA_CC, EXTRA_BCC, EXTRA_SUBJECT.然而,如果接收程式沒有針對那些做特殊的處理,則不會有對應的反應。你也可以使用自定義的附加值,但是除非接收的程式能夠識别出來,不然沒有任何效果。典型的做法是,你使用被接受程式定義的附加值。
  • 注意:一些e-mail程式,例如Gmail,對應接收的是EXTRA_EMAIL與EXTRA_CC,他們都是String類型的,可以使用putExtra(string,string[])方法來添加到intent裡面。

Send Binary Content [分享二進制内容]

  • 分享二進制的資料需要結合設定特定的MIME Type,需要在EXTRA_STREAM裡面放置資料的URI,下面有個分享圖檔的例子,這個例子也可以修改用來分享任何類型的二進制資料:
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, uriToImage);
shareIntent.setType("image/jpeg");
startActivity(Intent.createChooser(shareIntent, getResources().getText(R.string.send_to)));
           
  • 請注意下面的内容:
  • 你可以使用"**”來表示MIME。像前面描述的那樣,這取決于那些接收的程式解析并處理你的資料。下面是一個例子:
ArrayList<Uri> imageUris = new ArrayList<Uri>();
imageUris.add(imageUri1); // Add your image URIs here
imageUris.add(imageUri2);

Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND_MULTIPLE);
shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris);
shareIntent.setType("image/*");
startActivity(Intent.createChooser(shareIntent, "Share images to.."));
           
  • 當然,請確定指定到資料的URIs能夠被接收程式所通路(添加通路權限)。

學習自:http://developer.android.com/training/sharing/send.html,轉載請注明出處,謝謝! 轉載請注明出處:http://blog.csdn.net/kesenhoo,謝謝!