Android Intent分享檔案|分享圖片|分享文字|功能的實現
阿新 • • 發佈:2019-02-16
- Android Intent 實現分享功能。可分享圖片,檔案,文字給QQ好友,微信好友,簡訊聯絡人。
- 如我所知:網上已經有一大堆這樣相關的資料。但是有些不幸的是:沒有看到一個完整的,比較全面的,可以直接拿來使用的工具類。於是,我結合網上找的這些資料,做了一個簡單的整合,以便使用。
- 廢話就不多說了,直接上程式碼:
package com.xxx.ggg.Media.mediaUtils;
import java.io.File;
import java.util.ArrayList;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Parcelable;
import android.webkit.MimeTypeMap;
import com.xxx.ggg.R;
public class ShareUtils {
/**
*
* 分享功能|分享單張圖片
*
* @param context
* 上下文
* @param activityTitle
* Activity的名字
* @param msgTitle
* 訊息標題
* @param msgText
* 訊息內容
* @param imgPath
* 圖片路徑,不分享圖片則傳null
*
*/
public static void shareMsg(Context context, String activityTitle,
String msgTitle, String msgText, String imgPath) {
Intent intent = new Intent(Intent.ACTION_SEND);
if (imgPath == null || imgPath.equals("")) {
intent.setType("text/plain"); // 純文字
} else {
File f = new File(imgPath);
if (f != null && f.exists() && f.isFile()) {
intent.setType("image/jpg");
Uri u = Uri.fromFile(f);
intent.putExtra(Intent.EXTRA_STREAM, u);
}
}
intent.putExtra(Intent.EXTRA_SUBJECT, msgTitle);
intent.putExtra(Intent.EXTRA_TEXT, msgText);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(Intent.createChooser(intent, activityTitle));
}
/**
* 分享多張照片
*
* @param context
* @param list
* ArrayList<ImageUri>
*/
public static void sendMultiple(Context context,
ArrayList<? extends Parcelable> list) {
Intent intent = new Intent(Intent.ACTION_SEND_MULTIPLE);
intent.setType("image/*");
intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, list);
intent.putExtra(Intent.EXTRA_SUBJECT, "");
intent.putExtra(Intent.EXTRA_TEXT, "");
intent.putExtra(Intent.EXTRA_TITLE, "");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(Intent.createChooser(intent, context
.getResources().getString(R.string.tv_sendSelect)));
}
/**
* <ul>
* <li>分享任意型別的<b style="color:red">單個</b>檔案|不包含目錄</li>
* <li>[<b>經驗證!可以傳送任意型別的檔案!!!</b>]</li>
* <li># @author http://blog.csdn.net/yuxiaohui78/article/details/8232402</li>
* <ul>
*
* @param context
* @param uri
* Uri.from(file);
*
*/
public static void shareFile(Context context, Uri uri) {
// File file = new File("\sdcard\android123.cwj"); //附件檔案地址
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra("subject", ""); //
intent.putExtra("body", ""); // 正文
intent.putExtra(Intent.EXTRA_STREAM, uri); // 新增附件,附件為file物件
if (uri.toString().endsWith(".gz")) {
intent.setType("application/x-gzip"); // 如果是gz使用gzip的mime
} else if (uri.toString().endsWith(".txt")) {
intent.setType("text/plain"); // 純文字則用text/plain的mime
} else {
intent.setType("application/octet-stream"); // 其他的均使用流當做二進位制資料來發送
}
context.startActivity(intent); // 呼叫系統的mail客戶端進行傳送
}
/**
* <ul>
* <li>分享任意型別的<b style="color:red">多個</b>檔案|不包含目錄</li>
* <li>[<b>經驗證!可以傳送任意型別的檔案!!!</b>]</li>
* <li># @author http://blog.csdn.net/yuxiaohui78/article/details/8232402</li>
* <ul>
*
* @param context
* @param uris
* list.add(Uri.from(file));
*
*/
public static void shareMultipleFiles(Context context, ArrayList<Uri> uris) {
boolean multiple = uris.size() > 1;
Intent intent = new Intent(
multiple ? android.content.Intent.ACTION_SEND_MULTIPLE
: android.content.Intent.ACTION_SEND);
if (multiple) {
intent.setType("*/*");
intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
} else {
Uri value = uris.get(0);
String ext = MimeTypeMap.getFileExtensionFromUrl(value.toString());
String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(ext);
if(mimeType==null){
mimeType = "*/*";
}
intent.setType(mimeType);
intent.putExtra(Intent.EXTRA_STREAM, value);
}
context.startActivity(Intent.createChooser(intent, "Share"));
}
}
以上,便是所謂的分享功能。很類似傳送檔案給qq好友這樣。