最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android利用Intent.ACTION_SEND進(jìn)行分享

 更新時(shí)間:2018年05月08日 14:28:56   作者:Jenfer421  
這篇文章主要介紹了Android利用Intent.ACTION_SEND進(jìn)行分享,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

安卓系統(tǒng)本身可以很簡(jiǎn)便的實(shí)現(xiàn)分享功能,因?yàn)槲覀冎恍柘騭tartActivity傳遞一個(gè)ACTION_SEND的Intent,系統(tǒng)就為我們彈出一個(gè)應(yīng)用程序列表。其實(shí)在系統(tǒng)的文件管理器中,這應(yīng)該是我們常用的功能(包括文件的打開(kāi)Intent.ACTION_VIEW)。

下面列出一個(gè)簡(jiǎn)單的分享方式

Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");
sendIntent.setType("text/plain");
startActivity(sendIntent);

前兩行代碼不用說(shuō)了,就是一個(gè)簡(jiǎn)單的Action Intent,第三行的Intent.EXTRA_TEXT,是文本類型,還有EXTRA_EMAIL, EXTRA_CC, EXTRA_BCC, EXTRA_SUBJECT等等,這些看字面意思就可以理解。
重點(diǎn)說(shuō)一下Intent.EXTRA_STREAM。

設(shè)置合適的MIME類型,并且在附件數(shù)據(jù)中的EXTRA_STREAM中放一個(gè)指向數(shù)據(jù)的URI,就可以來(lái)分享二進(jìn)制數(shù)據(jù)。這個(gè)通常用來(lái)分享圖片,但是也可以用來(lái)分享任何類型的二進(jìn)制內(nèi)容,比如視頻,文件等等。

Intent shareIntent = newIntent();
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)));

下面說(shuō)一下Intent.setType這個(gè)方法:
參數(shù)有很多種,簡(jiǎn)單列出幾個(gè),”text/plain”、”image/jpeg”、”audio/mp4a-latm”、”audio/x-mpeg”、 “video/mp4”還有很多很多…
這里給出一個(gè)獲取類型的方法

 /**
 * 根據(jù)文件后綴名獲得對(duì)應(yīng)的MIME類型。
 * @param filePath
 */
 public static String getMimeType(String filePath) {
 MediaMetadataRetriever mmr = new MediaMetadataRetriever();
 String mime = "text/plain";
 if (filePath != null) {
 try {
 mmr.setDataSource(filePath);
 mime = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_MIMETYPE);
 } catch (IllegalStateException e) {
 return mime;
 } catch (IllegalArgumentException e) {
 return mime;
 } catch (RuntimeException e) {
 return mime;
 }
 }
 return mime;
 }

我們可以**同時(shí)發(fā)送多條內(nèi)容**,要發(fā)送多條數(shù)據(jù),使用ACTION_SNED_MULTIPLE和一個(gè)指向數(shù)據(jù)的URI list。MIME類型根據(jù)分享的內(nèi)容不同而不同。例如,如果分享3張JPEG圖片,那么類型為"image/jpeg"。如果有不同的圖片類型,那么就應(yīng)該用"image/*"來(lái)匹配處理不同類型圖片的activity。如果要處理各種不同的類型就應(yīng)該用"*/*"了。正如前面提到的,分析和處理分享是數(shù)據(jù)是接收程序的事情了。

但是需要明確的一點(diǎn)是,**要確保URI指向的數(shù)據(jù)要可以被接收程序訪問(wèn)到**。

另外一個(gè)知識(shí)點(diǎn)就是,我們可以對(duì)分享的App進(jìn)行篩選,比如我只想分享到QQ和微信平臺(tái),不關(guān)心人人網(wǎng),迅雷這樣的App

可通過(guò)Intent.createChooser方法實(shí)現(xiàn),

首先我們定義一個(gè)Action Intent

String type = getMimeType(path);
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
 shareIntent.putExtra(Intent.EXTRA_STREAM,Uri.fromFile(file));
 shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
 shareIntent.setType(getMimeType(path));

然后獲取可以用來(lái)發(fā)送該類型文件的ResolveInfo列表,也就是可以發(fā)送這種文件的應(yīng)用列表信息

List<ResolveInfo> resInfo = context.getPackageManager().queryIntentActivities(shareIntent, 0);

通過(guò)包名篩選出我們想要的應(yīng)用

ArrayList<Intent> targetIntents = new ArrayList<Intent>();
 for (ResolveInfo info : resInfo) {
 ActivityInfo activityInfo = info.activityInfo;
 if (activityInfo.packageName.contains("com.tencent.mobileqq")
 ||activityInfo.packageName.contains("com.tencent.mm")) {
 Intent intent = new Intent(Intent.ACTION_SEND);
 intent.setPackage(activityInfo.packageName);
 intent.putExtra(Intent.EXTRA_STREAM,Uri.fromFile(file));
 intent.setClassName(activityInfo.packageName, activityInfo.name);
 targetIntents.add(intent);
 } 
 }

最后用Intent.createChooser打開(kāi)

Intent chooser = Intent.createChooser(targetIntents.remove(0), "Send mail...");
 chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetIntents.toArray(new Parcelable[]{}));
 context.startActivity(chooser);

到此,利用Intent.ACTION_SEND進(jìn)行分享就差不多介紹完了,是不是比申請(qǐng)友盟以及各個(gè)平臺(tái)要方便的多…

附上源碼,以作備用

/**
 * 發(fā)送文件
 * @param context
 * @param path
 */
 public static void sendFileByOtherApp(Context context, String path) {
 File file = new File(path);
 if (file.exists()) {
 String type = getMimeType(path);
 Intent shareIntent = new Intent();
 shareIntent.setAction(Intent.ACTION_SEND);
 shareIntent.putExtra(Intent.EXTRA_STREAM,Uri.fromFile(file));
 shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
 shareIntent.setType(getMimeType(path));
 List<ResolveInfo> resInfo = context.getPackageManager().queryIntentActivities(shareIntent, 0);
 if (!resInfo.isEmpty()) {
 ArrayList<Intent> targetIntents = new ArrayList<Intent>();
 for (ResolveInfo info : resInfo) {
 ActivityInfo activityInfo = info.activityInfo;
 if (activityInfo.packageName.contains("com.tencent.mobileqq")
 ||activityInfo.packageName.contains("com.tencent.mm")) {
 Intent intent = new Intent(Intent.ACTION_SEND);
 intent.setPackage(activityInfo.packageName);
 intent.putExtra(Intent.EXTRA_STREAM,Uri.fromFile(file));
 intent.setClassName(activityInfo.packageName, activityInfo.name);
 targetIntents.add(intent);
 }


 }
 Intent chooser = Intent.createChooser(targetIntents.remove(0), "Send mail...");
 chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetIntents.toArray(new Parcelable[]{}));
 context.startActivity(chooser);

 }
 }

 }

當(dāng)然,我們也可以做一個(gè)Activity,像QQ微信一樣,來(lái)接收文件或者wen z,只要會(huì)使用intentfilter就可以了

<intent-filter>
 <action android:name="android.intent.action.SEND" />
 <category android:name="android.intent.category.DEFAULT" />
 <data android:mimeType="image/*" />
 </intent-filter>
 <intent-filter>
 <action android:name="android.intent.action.SEND" />
 <category android:name="android.intent.category.DEFAULT" />
 <data android:mimeType="text/plain" />
 </intent-filter>
 <intent-filter>
 <action android:name="android.intent.action.SEND_MULTIPLE" />
 <category android:name="android.intent.category.DEFAULT" />
 <data android:mimeType="image/*" />
 </intent-filter>

然后在oncreate方法中

if (Intent.ACTION_SEND.equals(action) && type != null) {
 if ("text/plain".equals(type)) {
 handleSendText(intent); // 處理發(fā)送來(lái)的文字
 } else if (type.startsWith("image/")) {
 handleSendImage(intent); // 處理發(fā)送來(lái)的圖片
 }
 } else if (Intent.ACTION_SEND_MULTIPLE.equals(action) && type != null) {
 if (type.startsWith("image/")) {
 handleSendMultipleImages(intent); // 處理發(fā)送來(lái)的多張圖片
 }
 } else {
 // 處理其他intents,比如由主屏啟動(dòng)
 }

這樣基本用法就介紹完了,基本的分享功能差不多可以完成,但是想要分享圖文內(nèi)容,或者自定義分享界面,可能就需要再深度挖掘了。

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • 解決Android Studio電腦不支持HAXM的問(wèn)題

    解決Android Studio電腦不支持HAXM的問(wèn)題

    這篇文章主要介紹了Android Studio電腦不支持HAXM的問(wèn)題及解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2020-03-03
  • Android自定義控件之廣告條滾動(dòng)效果

    Android自定義控件之廣告條滾動(dòng)效果

    這篇文章主要為大家詳細(xì)介紹了Android自定義控件之廣告條滾動(dòng)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Android控件之TabHost用法實(shí)例分析

    Android控件之TabHost用法實(shí)例分析

    這篇文章主要介紹了Android控件之TabHost用法,以完整實(shí)例形式較為詳細(xì)的分析了TabHost控件實(shí)現(xiàn)選項(xiàng)卡的相關(guān)技巧,需要的朋友可以參考下
    2015-09-09
  • Android Socket 線程連接openwrt與arduino單片機(jī)串口雙向通信的實(shí)例解析

    Android Socket 線程連接openwrt與arduino單片機(jī)串口雙向通信的實(shí)例解析

    這篇文章主要介紹了Android Socket 線程連接openwrt與arduino單片機(jī)串口雙向通信的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-11-11
  • Android8.0適配前臺(tái)定位服務(wù)service的示例代碼

    Android8.0適配前臺(tái)定位服務(wù)service的示例代碼

    這篇文章主要介紹了Android8.0適配前臺(tái)定位服務(wù)service的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • Android基于OpenCV實(shí)現(xiàn)Harris角點(diǎn)檢測(cè)

    Android基于OpenCV實(shí)現(xiàn)Harris角點(diǎn)檢測(cè)

    角點(diǎn)就是極值點(diǎn),即在某方面屬性特別突出的點(diǎn)。當(dāng)然,你可以自己定義角點(diǎn)的屬性(設(shè)置特定熵值進(jìn)行角點(diǎn)檢測(cè))。角點(diǎn)可以是兩條線的交叉處,也可以是位于相鄰的兩個(gè)主要方向不同的事物上的點(diǎn)。本文介紹如何基于OpenCV實(shí)現(xiàn)Harris角點(diǎn)檢測(cè)
    2021-06-06
  • Android?WebView預(yù)渲染介紹

    Android?WebView預(yù)渲染介紹

    這篇文章主要介紹了Android?WebView預(yù)渲染介紹,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • Android Retrofit的簡(jiǎn)單介紹和使用

    Android Retrofit的簡(jiǎn)單介紹和使用

    這篇文章主要介紹了Android Retrofit的簡(jiǎn)單介紹和使用
    2017-03-03
  • android分享純圖片到QQ空間實(shí)現(xiàn)方式

    android分享純圖片到QQ空間實(shí)現(xiàn)方式

    今天小編就為大家分享一篇關(guān)于android分享純圖片到QQ空間實(shí)現(xiàn)方式,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-04-04
  • Android Activity的生命周期與啟動(dòng)模式全面解讀

    Android Activity的生命周期與啟動(dòng)模式全面解讀

    雖然說(shuō)我們天天都在使用Activity,但是你真的對(duì)Activity的生命機(jī)制完全了解了嗎?Activity的生命周期方法只有七個(gè),但是其實(shí)那只是默認(rèn)的情況。也就是說(shuō)在其他情況下,Activity的生命周期可能不會(huì)是按照我們以前所知道的流程,這就要說(shuō)到Activity的啟動(dòng)模式
    2021-10-10

最新評(píng)論

正镶白旗| 谢通门县| 越西县| 延安市| 若羌县| 高要市| 出国| 西吉县| 抚宁县| 清原| 屯留县| 扎赉特旗| 调兵山市| 抚顺市| 时尚| 漯河市| 平阳县| 湘阴县| 嘉荫县| 福贡县| 东平县| 曲阜市| 乐陵市| 辽源市| 汉源县| 辽中县| 桂东县| 延长县| 喀喇沁旗| 萝北县| 海阳市| 广宁县| 竹北市| 开鲁县| 石家庄市| 清徐县| 望江县| 钟山县| 都匀市| 黔西| 呼伦贝尔市|