Android Intent分享文件|分享图片|分享文字|功能的实现

  • 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好友这样。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值