日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

【Android Developers Training】 32. 向其它應(yīng)

系統(tǒng) 2167 0

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

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


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

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

Note:

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

?

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

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

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

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

  • 哪怕用戶之前已經(jīng)選擇了一個默認應(yīng)用,選擇器仍然會顯示出來。
  • 如果沒有匹配的應(yīng)用,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)));
      
    

運行結(jié)果如圖1所示。

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

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

Note:

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

?

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

二進制數(shù)據(jù)的分享是將 ACTION_SEND 的行為,恰當?shù)腗IME類型,數(shù)據(jù)的URI放置在名為 EXTRA_STREAM 的附加選項中,這三者結(jié)合在一起。下面的例子經(jīng)常被用來分享一個圖片,但也能用來分享二進制類型的數(shù)據(jù)內(nèi)容:

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

務(wù)必記住下面的幾點提示:

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

?

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

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

      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 所指向的數(shù)據(jù)是接收intent應(yīng)用能夠有權(quán)限訪問的數(shù)據(jù)。

【Android Developers Training】 32. 向其它應(yīng)用發(fā)送簡單數(shù)據(jù)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 蚌埠市| 石柱| 鱼台县| 余江县| 阿拉善右旗| 锡林郭勒盟| 大同市| 福安市| 德钦县| 太和县| 简阳市| 克拉玛依市| 盐津县| 安顺市| 双柏县| 榆社县| 博客| 宿迁市| 资源县| 德兴市| 尼木县| 梁山县| 尚志市| 张家口市| 新营市| 张家界市| 郴州市| 祁门县| 如皋市| 温泉县| 阿克| 从化市| 石门县| 高陵县| 米泉市| 永嘉县| 瓮安县| 会昌县| 大宁县| 福鼎市| 乡宁县|