W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
編寫(xiě):kesenhoo - 原文:http://developer.android.com/training/sharing/send.html
在構(gòu)建一個(gè)intent時(shí),必須指定這個(gè)intent需要觸發(fā)的actions。Android定義了一些actions,比如ACTION_SEND,該action表明該intent用于從一個(gè)activity發(fā)送數(shù)據(jù)到另外一個(gè)activity的,甚至可以是跨進(jìn)程之間的數(shù)據(jù)發(fā)送。
為了發(fā)送數(shù)據(jù)到另外一個(gè)activity,我們只需要指定數(shù)據(jù)與數(shù)據(jù)的類型,系統(tǒng)會(huì)自動(dòng)識(shí)別出能夠兼容接受的這些數(shù)據(jù)的activity。如果這些選擇有多個(gè),則把這些activity顯示給用戶進(jìn)行選擇;如果只有一個(gè),則立即啟動(dòng)該Activity。同樣的,我們可以在manifest文件的Activity描述中添加接受的數(shù)據(jù)類型。
在不同的程序之間使用intent收發(fā)數(shù)據(jù)是在社交分享內(nèi)容時(shí)最常用的方法。Intent使用戶能夠通過(guò)最常用的程序進(jìn)行快速簡(jiǎn)單的分享信息。
注意:為ActionBar添加分享功能的最佳方法是使用ShareActionProvider,其運(yùn)行與API level 14以上的系統(tǒng)。ShareActionProvider將在第3課中進(jìn)行詳細(xì)介紹。
ACTION_SEND最直接常用的地方是從一個(gè)Activity發(fā)送文本內(nèi)容到另外一個(gè)Activity。例如,Android內(nèi)置的瀏覽器可以將當(dāng)前顯示頁(yè)面的URL作為文本內(nèi)容分享到其他程序。這一功能對(duì)于通過(guò)郵件或者社交網(wǎng)絡(luò)來(lái)分享文章或者網(wǎng)址給好友而言是非常有用的。下面是一段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);
如果設(shè)備上安裝有某個(gè)能夠匹配ACTION_SEND且MIME類型為text/plain的程序,則Android系統(tǒng)會(huì)立即執(zhí)行它。若有多個(gè)匹配的程序,則系統(tǒng)會(huì)把他們都給篩選出來(lái),并呈現(xiàn)Dialog給用戶進(jìn)行選擇。
如果為intent調(diào)用了Intent.createChooser(),那么Android總是會(huì)顯示可供選擇。這樣有一些好處:
下面是更新后的代碼:
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));
效果圖如下:
另外,我們可以為intent設(shè)置一些標(biāo)準(zhǔn)的附加值,例如:EXTRA_EMAIL, EXTRA_CC, EXTRA_BCC, EXTRA_SUBJECT等。然而,如果接收程序沒(méi)有針對(duì)那些做特殊的處理,則不會(huì)有對(duì)應(yīng)的反應(yīng)。
注意:一些e-mail程序,例如Gmail,對(duì)應(yīng)接收的是EXTRA_EMAIL與EXTRA_CC,他們都是String類型的,可以使用putExtra(string,string[])方法來(lái)添加至intent中。
分享二進(jìn)制的數(shù)據(jù)需要結(jié)合設(shè)置特定的MIME類型,需要在
EXTRA_STREAM`里面放置數(shù)據(jù)的URI,下面有個(gè)分享圖片的例子,該例子也可以修改用于分享任何類型的二進(jìn)制數(shù)據(jù):
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)));
請(qǐng)注意以下內(nèi)容:
*/*
這樣的方式來(lái)指定MIME類型,但是這僅僅會(huì)match到那些能夠處理一般數(shù)據(jù)類型的Activity(即一般的Activity無(wú)法詳盡所有的MIME類型)為了同時(shí)分享多種不同類型的內(nèi)容,需要使用ACTION_SEND_MULTIPLE
與指定到那些數(shù)據(jù)的URIs列表。MIME類型會(huì)根據(jù)分享的混合內(nèi)容而不同。例如,如果分享3張JPEG的圖片,那么MIME類型仍然是image/jpeg
。如果是不同圖片格式的話,應(yīng)該是用image/*
來(lái)匹配那些可以接收任何圖片類型的activity。如果需要分享多種不同類型的數(shù)據(jù),可以使用*/*
來(lái)表示MIME。像前面描述的那樣,這取決于那些接收的程序解析并處理我們的數(shù)據(jù)。下面是一個(gè)例子:
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.."));
當(dāng)然,請(qǐng)確保指定到數(shù)據(jù)的URIs能夠被接收程序所訪問(wèn)(添加訪問(wèn)權(quán)限)。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: