黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

【Android Developers Training】 32. 向其它應

系統(tǒng) 2284 0

注:本文翻譯自Google官方的Android Developers Training文檔,譯者技術一般,由于喜愛安卓而產生了翻譯的念頭,純屬個人興趣愛好。

原文鏈接: http://developer.android.com/training/sharing/send.html


當你構造了一個intent,你需要制定你的intent將會“ 激活 ”的行為。Andriud定義了一些行為,就像你所料想的一樣,這里面就有 ACTION_SEND 這個行為,它表明了這個intent是將一個數據從一個Activity發(fā)送至另一個Activity,甚至這一操作可能會跨進程執(zhí)行。為了將數據發(fā)送中另一個activity,所有你需要做的就是指定這個數據以及它的類型,系統(tǒng)會尋找出于其要求相符合的所有activity,并將它們展現給用戶(如果有多個選擇);或者直接啟動這個activity(只有一個符合的activity)。類似的,你可以將你的activity所能支持的來自其它應用的數據類型在你的清單文件中聲明出來。

在應用之間通過intent發(fā)送和接收數據在社交分享內容一塊最為常用。Intent允許同于使用他們最喜愛的應用快速和簡單的分享信息。

Note:

使用 ShareActionProvider 將一個分享行為添加到一個 ActionBar 是最好的方法,這在API Level 14及以上的平臺上可以使用。 ShareActionProvider 將會在課程: Adding an Easy Share Action 中做進一步討論。

?

一). 發(fā)送文字內容

最直接和通用的使用 ACTION_SEND 行為的場景是將文本內容從一個activity發(fā)送至另一個activity。例如,內置的瀏覽器應用可以將當前頁面的URL以文本形式分享給任何一個應用。這對于將一個文章或者網站通過Email或者社交網站分享給朋友是很有用的。下面就是實現這樣的分享的代碼:

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

如果有一個安裝的應用,它的intent過濾器能夠匹配 ACTION_SEND 和" text/plain "的MIME類型,Android就會執(zhí)行這個應用;如果不止一個應用能夠符合要求,系統(tǒng)會展示一個單選對話框(即一個應用選擇器),來讓用戶選擇一個應用。如果你為這個Intent調用 Intent.createChooser() ,Android將會 永遠 顯示這個選擇對話框,這有一些優(yōu)勢:

  • 哪怕用戶之前已經選擇了一個默認應用,選擇器仍然會顯示出來。
  • 如果沒有匹配的應用,Android會顯示一個系統(tǒng)消息。
  • 你可以自定義對話框的標題。

下面是更新優(yōu)化后的代碼:

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

運行結果如圖1所示。

圖1. 手持設備上選擇器對話框的截圖

另外,你可以為Intent設置一下附加選項(extras): EXTRA_EMAIL EXTRA_CC EXTRA_BCC EXTRA_SUBJECT 等。不過,如果接收intent的應用沒有設計成會使用它們,那么什么事情都不會發(fā)生。你也可以使用自定義的附加選項,當然只有接收intent的應用笨笨狗狗理解它們才會有效果。一般而言,你會使用被接收intent應用自己定義的附加選項。

Note:

一些Email應用,比如 Gmail ,會期望一個 String[] 的附加選項,比如: EXTRA_EMAIL EXTRA_CC 。你可以使用 putExtra(String, String[]) 來將它們添加至你的intent。

?

二). 發(fā)送二進制內容

二進制數據的分享是將 ACTION_SEND 的行為,恰當的MIME類型,數據的URI放置在名為 EXTRA_STREAM 的附加選項中,這三者結合在一起。下面的例子經常被用來分享一個圖片,但也能用來分享二進制類型的數據內容:

      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類型,這將只會匹配到可以處理通用數據流的activity。
  • 接受的應用需要響應的權限來訪問 Uri 指向的數據。推薦的操作方式是這樣的:
    • 在你的 ContentProvider 中保存數據,要確保其他應用有正確的權限訪問你的Provider。比較推薦的訪問機制是使用 per-URI permissions ,它是臨時的,并只將訪問權限授權給接收intent的應用。一個簡單的方法是使用 FileProvider 輔助類來創(chuàng)建一個這樣的 ContentProvider
    • 使用系統(tǒng)的 MediaStore MediaStore 主要針對的是視頻,音頻和圖像的MIME類型,然而從Android 3.0(API Level 11)開始,它也能存儲非多媒體的數據類型(查看: MediaStore.Files 了解更多)。當一個“ content:// ”類型的用來分享的 Uri 被傳遞到 onScanCompleted() 回調函數之后,可以通過使用 scanFile() 將文件插入到 MediaStore 中。注意:一旦內容被添加到系統(tǒng)的 MediaStore ,它將會被設備上任何應用所訪問。

?

三). 發(fā)送多組內容

要分享多組內容,使用 ACTION_SEND_MULTIPLE 行為,和一個指向內容的URI的List。MIME的類型根據你要分享的內容而變化。例如,如果你要分享三張JPEG圖片,那么類型仍然是“ image/jpeg ”。如果是各種圖片格式的混合,那么類型就應該是“ image/* ”,它會尋找能夠處理任意 格式 圖片的Activity。僅在你在分享很多種類型的內容時,才應該使用“ */* ”。如之前所述,解析和處理數據的行為就要看接收intent的應用了。下面是一個發(fā)送多組內容數據的例子:

      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 所指向的數據是接收intent應用能夠有權限訪問的數據。

【Android Developers Training】 32. 向其它應用發(fā)送簡單數據


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論