直接上代码,工具类

import android.content.ComponentName;import android.content.ContentValues;import android.content.Context;import android.content.Intent;import android.content.pm.PackageInfo;import android.database.Cursor;import android.net.Uri;import android.os.Build;import android.provider.MediaStore;import android.util.Log;import android.widget.Toast;import java.io.File;import java.io.FileNotFoundException;import java.util.ArrayList;import java.util.List;public class WechatShareUtil {    /**     * 分享多图片到QQ     */    public static void sharePicToQQNoSDK(Context context, List paths) {        if (isInstallQQ(context)) {            Intent shareIntent = new Intent();            shareIntent.setAction(Intent.ACTION_SEND_MULTIPLE);            shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);            shareIntent.setType("image/*");            // 遍历所有支持发送图片的应用。找到需要的应用            ComponentName componentName = new ComponentName("com.tencent.mobileqq", "com.tencent.mobileqq.activity.JumpActivity");            shareIntent.setComponent(componentName);            ArrayList imageList = new ArrayList<>();            for (String picPath : paths) {                Log.e("backinfo", picPath);                File file = new File(picPath);                if (file.exists()){                    Uri uri = null;                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {                        try {                            uri = Uri.parse(MediaStore.Images.Media.insertImage(context.getContentResolver(), file.getAbsolutePath(), file.getName(), null));                        } catch (FileNotFoundException e) {                            Toast.makeText(context,"图片不存在", Toast.LENGTH_SHORT).show();                            e.printStackTrace();                        }                    } else {                        uri = Uri.fromFile(file);                    }                    imageList.add(uri);                }            }            if(imageList.size() == 0){                Toast.makeText(context,"图片不存在", Toast.LENGTH_SHORT).show();                return;            }            shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageList);            context.startActivity(Intent.createChooser(shareIntent, "Share"));        }    }    /**     * 分享单图片到朋友圈     * @param context     * @param imagePath     */    public static void sharePicsToWXFriendCircle(Context context, String imagePath) {        if (!isInstallWeChart(context)) {            Toast.makeText(context,"您没有安装微信", Toast.LENGTH_SHORT).show();            return;        }        Intent intent = new Intent();        intent.setComponent(new ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareToTimeLineUI"));        intent.setAction(Intent.ACTION_SEND);        File f = new File(imagePath);        Uri uri = null;        if (f.exists()){            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {                uri = getImageContentUri(context, f);            } else {                uri = Uri.fromFile(f);            }        }else {            Toast.makeText(context,"图片不存在", Toast.LENGTH_SHORT).show();            return;        }        intent.setType("image/*");        intent.putExtra(Intent.EXTRA_STREAM, uri); //图片数据(支持本地图片的Uri形式)        intent.putExtra("Kdescription", ""); //微信分享页面,图片上边的描述        context.startActivity(intent);    }    /**     * 唤醒微信     * @param context     */    public static void startWechat(Context context){        Intent intent = new Intent(Intent.ACTION_MAIN);        ComponentName cmp = new ComponentName("com.tencent.mm","com.tencent.mm.ui.LauncherUI");        intent.addCategory(Intent.CATEGORY_LAUNCHER);        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);        intent.setComponent(cmp);        context.startActivity(intent);    }    /**     * 分享图片给好友(多图片)     * @param context     * @param paths     */    public static void sharePicToWechatNoSDK(Context context, List paths) {        if(!isInstallWeChart(context)){            Toast.makeText(context,"您没有安装微信", Toast.LENGTH_SHORT).show();            return;        }        Intent intent = new Intent();        ComponentName comp = new ComponentName("com.tencent.mm","com.tencent.mm.ui.tools.ShareImgUI");        intent.setComponent(comp);        intent.setAction(Intent.ACTION_SEND_MULTIPLE);        intent.setType("image/*");        ArrayList imageList = new ArrayList<>();        for (String picPath : paths) {            File file = new File(picPath);            if (file.exists()){                Uri uri = null;                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {                    try {                        uri = Uri.parse(MediaStore.Images.Media.insertImage(context.getContentResolver(), file.getAbsolutePath(), file.getName(), null));                    } catch (FileNotFoundException e) {                        Toast.makeText(context,"图片不存在", Toast.LENGTH_SHORT).show();                        e.printStackTrace();                    }                } else {                    uri = Uri.fromFile(file);                }                imageList.add(uri);            }        }        if(imageList.size() == 0){            Toast.makeText(context,"图片不存在", Toast.LENGTH_SHORT).show();            return;        }        intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageList); //图片数据(支持本地图片的Uri形式)        context.startActivity(intent);    }    /**     * 获取分享到微信朋友圈的uri格式     * @param context     * @param imageFile     * @return     */    public static Uri getImageContentUri(Context context, File imageFile) {        String filePath = imageFile.getAbsolutePath();        Cursor cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,                new String[]{MediaStore.Images.Media._ID}, MediaStore.Images.Media.DATA +"=? ",                new String[]{filePath}, null);        Uri uri =null;        if (cursor !=null) {            if (cursor.moveToFirst()) {                int id = cursor.getInt(cursor.getColumnIndex(MediaStore.MediaColumns._ID));                Uri baseUri = Uri.parse("content://media/external/images/media");                uri = Uri.withAppendedPath(baseUri, "" + id);            }            cursor.close();        }        if (uri ==null) {            ContentValues values = new ContentValues();            values.put(MediaStore.Images.Media.DATA, filePath);            uri = context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);        }        return uri;    }    /**检查是否安装微信     * @param context     * @return     */    private static boolean isInstallWeChart(Context context){        PackageInfo packageInfo = null;        try {            packageInfo = context.getPackageManager().getPackageInfo("com.tencent.mm", 0);        } catch (Exception e) {            packageInfo = null;            e.printStackTrace();        }        if (packageInfo == null) {            return false;        } else {            return true;        }    }    /**检查是否安装QQ     * @param context     * @return     */    private static boolean isInstallQQ(Context context){        PackageInfo packageInfo = null;        try {            packageInfo = context.getPackageManager().getPackageInfo("com.tencent.mobileqq", 0);        } catch (Exception e) {            packageInfo = null;            e.printStackTrace();        }        if (packageInfo == null) {            return false;        } else {            return true;        }    }}

FileDownloader 递归多文件下载

import android.content.Context;import android.content.Intent;import android.net.Uri;import android.util.Log;import com.liulishuo.filedownloader.BaseDownloadTask;import com.liulishuo.filedownloader.FileDownloadSampleListener;import com.liulishuo.filedownloader.FileDownloader;import com.weipai.dialog.LoadingDialog;import com.weipai.main.contact.Contact;import java.io.File;import java.util.ArrayList;import java.util.Date;import java.util.List;public class DownloadFileUtil {    private Context context;    private String path;    private boolean isShowLoading = true;    private List pathList;    private List netUrlList;    private OnFilesDownloadListener listener;    //private LoadingDialog dialog;    public static DownloadFileUtil init(Context context, String path) {        return new DownloadFileUtil(context, path);    }    private DownloadFileUtil(Context context, String path) {        this.context = context;        this.path = path;        pathList = new ArrayList<>();        netUrlList = new ArrayList<>();    }    public DownloadFileUtil setOnFilesDownloadListener(OnFilesDownloadListener listener){        this.listener = listener;        return this;    }    private int fileCount = 0;    private OnSingleFileDownloadListener l = new OnSingleFileDownloadListener() {        @Override        public void onCompleted(String path) {            ++fileCount;            pathList.add(path);            if (fileCount == netUrlList.size()){                //dialog.dismiss();                if (listener != null) listener.onCompleted(pathList);            }else {                downloadFile(netUrlList.get(fileCount), l);            }        }    };    /**     * 递归下载多文件     * @param urls     */    public void downloadFiles(final List urls){        netUrlList.clear();        netUrlList.addAll(urls);        if (netUrlList.size() > 0) {            //dialog = new LoadingDialog(context);            //dialog.show();            downloadFile(urls.get(0), l);        }    }    /**     * 单文件下载     * @param url     * @param listener     */    public void downloadFile(String url, final OnSingleFileDownloadListener listener) {        Log.e("backinfo", "downloadFile " + fileCount);        Log.e("backinfo", "downloadFile url" + url);        Log.e("backinfo", "downloadFile path" + path);        String fileName = new Date().getTime() + ".jpg";        /*if (fileName.isEmpty()) {            if (fileCount == netUrlList.size() - 1) dialog.dismiss();            return;        }*/        FileDownloader.getImpl().create(url)                .setPath(path + fileName, false)                .setCallbackProgressTimes(300)                .setMinIntervalUpdateSpeed(400)                .setAutoRetryTimes(3)                .setListener(new FileDownloadSampleListener() {                    @Override                    protected void pending(BaseDownloadTask task, int soFarBytes, int totalBytes) {                        Log.e("backinfo", ",soFarBytes:" + soFarBytes + ",totalBytes:" + totalBytes + ",percent:" + soFarBytes * 1.0 / totalBytes + ",speed:" + task.getSpeed());                    }                    @Override                    protected void progress(BaseDownloadTask task, int soFarBytes, int totalBytes) {                        Log.e("backinfo", ",soFarBytes:" + soFarBytes + ",totalBytes:" + totalBytes + ",percent:" + soFarBytes * 1.0 / totalBytes + ",speed:" + task.getSpeed());                    }                    @Override                    protected void blockComplete(BaseDownloadTask task) {                        Log.e("backinfo", "blockComplete ");                    }                    @Override                    protected void completed(BaseDownloadTask task) {                        //  VideoPlayerManager.instance().resumeVideoPlayer();                        File file = new File(task.getTargetFilePath());                        Log.e("backinfo",  "completed " + task.getTargetFilePath());                        if (file.exists()) {                            Uri localUri = Uri.fromFile(file);                            Intent localIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, localUri);                            context.sendBroadcast(localIntent);                            listener.onCompleted(file.getAbsolutePath());                        }                    }                    @Override                    protected void paused(BaseDownloadTask task, int soFarBytes, int totalBytes) {                        Log.e("backinfo", "paused ");                    }                    @Override                    protected void error(BaseDownloadTask task, Throwable e) {                        Log.e("backinfo", "error " + e.getLocalizedMessage());                    }                    @Override                    protected void warn(BaseDownloadTask task) {                        Log.e("backinfo", "warn ");                    }                }).start();    }    private interface OnSingleFileDownloadListener{        void onCompleted(String path);    }    public interface OnFilesDownloadListener{        void onCompleted(List pathList);    }    /** 获取文件后缀 */    public String getFileExtension(String url) {        int i = url.lastIndexOf('.');        if (i > 0 && i < url.length() - 1) {            return url.substring(i + 1).toLowerCase();        }        return "";    }}

使用例:

DownloadFileUtil.init(context,  "/sdcard/DCIM/Camera/")               .setOnFilesDownloadListener(new DownloadFileUtil.OnFilesDownloadListener() {                @Override                    public void onCompleted(List pathList) {                        WechatShareUtil.sharePicToQQNoSDK(context, pathList);                    }                }).downloadFiles(urls);

 

更多相关文章

  1. android拖动图片移动效果
  2. Android拷贝图片到指定文件路径
  3. android 安卓创建文件夹
  4. Android 解析excel文件
  5. android 关于图片的放大,缩小,旋转功能的实现(附源码)
  6. Android Location 和 Sensor的使用,图片旋转角度
  7. AndroidManifest.xml 系统找不到指定的文件
  8. Smail反汇编文件语句说明
  9. Android 复制单个文件到指定目录,Android copy file

随机推荐

  1. 企业实战|Mysql不停机维护主从同步
  2. 算法基础7:平衡查找树概述
  3. 政务大数据系列6:政务大数据的物理模型
  4. 大数据和云计算技术周报(第28期):NoSQL特辑
  5. PyCharm2020.3专业版永久激活(亲测有效,已
  6. 运维必须掌握的Linux面试题
  7. 企业实战|企业接口管理平台Yapi搭建
  8. VIM 文本编辑器
  9. 国内Top团队大牛带你玩转Android性能分析
  10. 5G时代必备 音视频WebRTC实时互动直播技