Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android 信息共享專題之內容發布

Android 信息共享專題之內容發布

編輯:Android開發實例

構造和觸發一個Intent,需要先要指定其Action。Android系統已經預定義了很多Action,其中的ACTION_SEND用來做數據分享,可以把數據從一個Activity發送到另一個Activity, 甚至跨越進程邊界的限制。要想給其他的Activity發送內容,您需要做的是構造一個Intent,設置Action類別為ACTION_SEND,把數據填充到該Intent中,並且設置正確的數據的類型,最後觸發該Intent,這樣系統就會選擇最合適的目標Activity來接收和處理該數據。如果候選的目標Activity多於一個,則系統通常會彈出一個對話框讓用戶來選擇,如果候選的目標Activity只有一個,那麼系統就會直接啟動該Activity來處理數據。同樣地,您自己的應用程序也可以在manifest文件中聲明可以處理的數據類型,這樣當其他Activity發送此種類型的數據時,系統就會將您的App列入到候選名單中。

數據的共享常應用在社會化分享的APP中,方便用戶快速和簡單的分享自己的共享信息。

注意 :最簡單的在ActionBar中添加一個”share action item”的方法是使用ShareActionProvider,其要求API level 14,將在後面的章節討論。


 

發送文本數據

數據分享最常用的是Activity之間發送文本內容,例如,系統的內置浏覽器可以共享當前正在浏覽頁面的URL地址,以純文本的數據格式存儲,這非常有助於用戶通過Email或者社會化分享APP分享有趣的文章鏈接和網站鏈接。

示例代碼:

   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);

如果當前設備裡安裝的所有應用程序中其中有一個APP的intent filter設置了ACTION_SEND,並且聲明的數據類型匹配純文本(text/plain)格式,那麼系統就會啟動它,若此時匹配的APP個數多於一個,系統會彈出一個選擇對話框(a “chooser”) ,讓用戶從中選擇處理該數據的APP。若您觸發該Intent的時候使用了Intent.createChooser() ,那麼系統總是會彈出選擇對話框(a “chooser”) 讓用戶選擇,這麼做有如下優點。

  • 即使用戶以前選擇過默認的處理APP,系統還是會彈出選擇器讓用戶可以重新選擇
  • 如果沒有任何匹配的APP可以處理該數據,那麼系統會有提示信息
  • 您可以為選擇器對話框設定自定義標題

示例代碼:

   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));

ACTION_SEND Intent 選擇器對話框如下面圖示

可選地,您也可以在Intent中設置一些標准的附加參數,比如EXTRA_EMAIL, EXTRA_CC, EXTRA_BCC, EXTRA_SUBJECT,除非目標APP會使用該數據,不然也沒有什麼副作用。通常如果您設計的應用程序可以用來接收和處理該數據,那麼應該使用它們。

注意:某些Email郵件處理程序,比如Gmail,需要的是一個字符串數組類型(String[] for extras like EXTRA_EMAIL and EXTRA_CC),那麼您應該使用putExtra(String, String[]) 來添加附加參數。

發送二進制數據

與發送文本格式的數據類似,構造一個Intent其Action為ACTION_SEND,設定正確的MIME類型,填充數據的URI 到Intent的鍵值 EXTRA_STREAM中,最後觸發該Intent就可以了。共享二進制數據最常用的是圖片數據的分享,其他任何的二進制數據都可以分享,只要設定了正確的MIME類型。

示例代碼:

   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)));

注意事項:

  1. MIME 類型可以設定為“*/*”, 但是這只能匹配能夠處理通用數據流的Activities
  2. 目標APP應當有讀取Uri 指向的數據的權限,解決辦法如下:
    • 將要共享的數據寫到外部/共享的存儲設備上,例如SD卡,這樣所有的APP都可以讀取。通過方法Uri.fromFile() 獲取該文件的Uri 地址,然後設置到Intent中。請記住,不是所有的APP都能正確識別”file:// “風格的Uri 地址。
    • 通過方法openFileOutput() 將數據保存到自己APP的目錄中,權限設置為任何APP可讀取( MODE_WORLD_READABLE ),然後調用方法getFileStreamPath() 會返回一個File的類型,最後同樣通過方法 Uri.fromFile() 獲取到該文件”file:// “風格的Uri 地址
    • 多媒體類型的文件,比如圖片,視頻文件和音頻文件可以通過方法 scanFile()添加到系統的多媒體數據庫(MediaStore ), onScanCompleted() 回調函數就會返回”content:// “格式的Uri 地址
    • 圖片文件也可以通過方法 insertImage() 添加到系統的多媒體數據庫(MediaStore ),函數調用會返回”content:// “格式的Uri 地址
    • 使用ContentProvider來共享您APP的數據,請確保目標APP擁有訪問您APP Provider 的正確權限設置(請參照per-URI permissions)

發送批量數據

要想批量發送數據,Intent的Action應設置為ACTION_SEND_MULTIPLE ,然後再設置批量數據的URIs 地址列表,MIME 類型隨著混合數據格式的不同而不同。比如,您發送3張JPEG 格式的圖片,那麼MIME 類型仍然是”image/jpeg“,如果發送的一系列圖片中格式不完全相同,那麼MIME 類型就應當設置為通用圖片格式”image/*” ,如果您發送的一系列數據中類型都不完全一樣,那麼MIME 類型就應當設置為通用格式”*/*” 。請注意,”image/*“只匹配能處理任何圖片格式的APP,而”*/*” 只能匹配處理通用數據類型的APP。

示例代碼

   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.."));

如上文所提到的,請確保目標APP有足夠的權限來訪問Uris地址指向的數據。

參考文摘:

http://developer.android.com/training/sharing/send.html

 

原文:http://blog.zhourunsheng.com/2012/01/android-%e4%bf%a1%e6%81%af%e5%85%b1%e4%ba%ab%e4%b8%93%e9%a2%98%e4%b9%8b%e5%86%85%e5%ae%b9%e5%8f%91%e5%b8%83/ | 潤物無聲

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved