欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android利用Intent.ACTION_SEND進行分享

 更新時間:2018年05月08日 14:28:56   作者:Jenfer421  
這篇文章主要介紹了Android利用Intent.ACTION_SEND進行分享,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

安卓系統(tǒng)本身可以很簡便的實現分享功能,因為我們只需向startActivity傳遞一個ACTION_SEND的Intent,系統(tǒng)就為我們彈出一個應用程序列表。其實在系統(tǒng)的文件管理器中,這應該是我們常用的功能(包括文件的打開Intent.ACTION_VIEW)。

下面列出一個簡單的分享方式

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

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

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

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

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

 /**
 * 根據文件后綴名獲得對應的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;
 }

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

但是需要明確的一點是,**要確保URI指向的數據要可以被接收程序訪問到**。

另外一個知識點就是,我們可以對分享的App進行篩選,比如我只想分享到QQ和微信平臺,不關心人人網,迅雷這樣的App

可通過Intent.createChooser方法實現,

首先我們定義一個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));

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

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

通過包名篩選出我們想要的應用

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打開

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進行分享就差不多介紹完了,是不是比申請友盟以及各個平臺要方便的多…

附上源碼,以作備用

/**
 * 發(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);

 }
 }

 }

當然,我們也可以做一個Activity,像QQ微信一樣,來接收文件或者wen z,只要會使用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ā)送來的文字
 } else if (type.startsWith("image/")) {
 handleSendImage(intent); // 處理發(fā)送來的圖片
 }
 } else if (Intent.ACTION_SEND_MULTIPLE.equals(action) && type != null) {
 if (type.startsWith("image/")) {
 handleSendMultipleImages(intent); // 處理發(fā)送來的多張圖片
 }
 } else {
 // 處理其他intents,比如由主屏啟動
 }

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

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關文章

  • Android 錄制音視頻的完整代碼

    Android 錄制音視頻的完整代碼

    Android中,如果要錄制音頻的話有兩個選擇,一個是MediaRecorder,另一個就是AudioRecord,前者使用簡單,后者就相對復雜點,本文通過代碼給大家介紹Android 錄制音視頻的相關知識,一起看看吧
    2021-06-06
  • Android中的Coroutine協(xié)程原理解析

    Android中的Coroutine協(xié)程原理解析

    這篇文章主要介紹了Android中的Coroutine協(xié)程原理解析,本文將會圍繞掛起與恢復徹底剖析協(xié)程的實現原理,包括Kotlin函數基礎知識復習,關于函數的個人經驗總結,需要的朋友可以參考下
    2022-03-03
  • Android 優(yōu)雅的實現通用格式化編輯

    Android 優(yōu)雅的實現通用格式化編輯

    這篇文章主要介紹了Android 優(yōu)雅的實現通用格式化編輯,幫助大家更好的理解和學習使用Android,感興趣的朋友可以了解下
    2021-03-03
  • Android與H5交互產生Script Error踩坑解決

    Android與H5交互產生Script Error踩坑解決

    這篇文章主要為大家介紹了Android與H5交互產生Script Error問題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • android開發(fā)中獲取手機分辨率大小的方法

    android開發(fā)中獲取手機分辨率大小的方法

    不管是在我們的布局還是在實現代碼中進行操控,我們的靈活性都不是局限于一個固定的數值,而是面對不同的手機對象都有一個適應的數值。
    2013-04-04
  • Android布局控件View?ViewRootImpl?WindowManagerService關系

    Android布局控件View?ViewRootImpl?WindowManagerService關系

    這篇文章主要為大家介紹了Android布局控件View?ViewRootImpl?WindowManagerService關系示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • Android短信備份及數據插入實現代碼解析

    Android短信備份及數據插入實現代碼解析

    這篇文章主要介紹了Android短信備份及數據插入實現代碼解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • Android實現自定義的彈幕效果

    Android實現自定義的彈幕效果

    現在的視頻網站基本都帶有彈幕效果,滿屏幕的文字從右到左飄來飄去??雌饋磉€蠻炫的,這篇文章就是來實現這個效果,大部分的都是從右向左移動漂移,本文的效果中也支持從左向右的漂移移動效果,同時也支持屏幕彈幕最多顯示個數的設置。有需要的可以參考借鑒。
    2016-08-08
  • android編程實現的自定義注釋模板實例

    android編程實現的自定義注釋模板實例

    這篇文章主要介紹了android編程實現的自定義注釋模板,以完整實例形式分析了Android自定義魔板的定義及具體實現與使用技巧,需要的朋友可以參考下
    2015-11-11
  • Flutter事件監(jiān)聽與EventBus事件的應用詳解

    Flutter事件監(jiān)聽與EventBus事件的應用詳解

    EventBus的核心是基于Streams。它允許偵聽器訂閱事件并允許發(fā)布者觸發(fā)事件,使得不同組件的數據不需要一層層傳遞,可以直接通過EventBus實現跨組件通訊
    2023-04-04

最新評論