注:本文翻譯自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元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
