前言

之前项目中有个需求就是可以转发多图到微信朋友圈,自微信6.7.3发布后,微信不再支持多图分享。SO  经过漫长的岁月(用户的测试)出现了一下最终的解决方法。

思路:由于微信发送朋友圈时,能选择到系统相册中的图片,所以我们把下载下来的图片保存到系统相册中,这样微信发送朋友圈时就可以选择到我们下载到本地的图片了。

第一步:下载图片

import android.content.Context;
import android.os.AsyncTask;
import android.os.Handler;
import android.os.Message;import com.bumptech.glide.Glide;
import com.bumptech.glide.request.target.Target;
import com.fastframe.log.L;
import com.letu.sharehelper.App;import java.io.File;
import java.util.ArrayList;
import java.util.List;/*** 创建时间: 2016/12/1.* 创建者: letu01.* 描述:*/
public class ImageDownloadManager {private static volatile ImageDownloadManager instance;private DownloadCallback callback;private String savePath;/*package*/public static ImageDownloadManager getInstance() {if (instance == null) {synchronized (ImageDownloadManager.class) {if (instance == null) {instance = new ImageDownloadManager();}}}return instance;}private ImageDownloadManager() {}/*** 开始下载** @param urls*/public void downLoad(Context context, String[] urls,String savePath, DownloadCallback callback) {this.callback = callback;this.savePath = savePath;new DownLoadImageTask(context, urls).executeOnExecutor(AsyncTask.SERIAL_EXECUTOR);}private class DownLoadImageTask extends AsyncTask<Void, Void, List<File>> {private final Context context;private String[] mUrls;public DownLoadImageTask(Context context, String[] mUrls) {this.context = context;this.mUrls = mUrls;}@Overrideprotected void onPreExecute() {super.onPreExecute();}@Overrideprotected List<File> doInBackground(Void... params) {List<File> fileList = new ArrayList<>();int length = mUrls.length;for (int i = 0; i < length; i++) {try {Message msg = handler.obtainMessage();msg.what = 1;msg.arg1 = i + 1;msg.arg2 = length;msg.sendToTarget();File file = Glide.with(context).load(mUrls[i]).downloadOnly(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL).get();String targetPath = savePath;String targetFilePath = targetPath + String.format("%s.jpg", String.valueOf(System.currentTimeMillis()));File newFile = new File(targetFilePath);boolean b = file.renameTo(newFile);if(b){fileList.add(newFile);}else {fileList.add(file);}} catch (Exception ex) {ex.printStackTrace();L.e(ex.getMessage());Message msg = handler.obtainMessage();msg.what = -1;msg.obj = ex;msg.sendToTarget();}}return fileList;}@Overrideprotected void onPostExecute(List<File> result) {if (null != callback) {callback.onSuccess(result);}}}private Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);switch (msg.what) {case 1:int index = msg.arg1;int total = msg.arg2;if (null != callback) {callback.onProgress(total, index);}break;case -1:if (null != callback) {callback.onError((Exception) msg.obj);}break;}}};}

开始下载:

ImageDownloadManager.getInstance().downLoad(activity, urls, new DownloadCallback() {@Overridepublic void onProgress(int totalNumbers, int progressIndex) {Log.e("",String.format("正在下载图片,第%d张", progressIndex))}@Overridepublic void onSuccess(final List<File> files) {Log.e("","图片下载完成!")}@Overridepublic void onError(final Exception e) {Log.e("","图片下载失败,请重试!")}});

第二步:将图片扫描到系统相册中

/**
*context   上下文
*fileList  待扫描文件列表
*/
new FileScanManager(context, fileList, new FileScanManager.ScanListener() {@Overridepublic void onProgress(Uri uri) {//扫描进度}@Overridepublic void onFinish() {//TODO 做扫描完成后的操作;}});

扫描类:

/*** createTime: 2018/11/28.13:50* updateTime: 2018/11/28.13:50* author: singleMan.* desc: 扫描文件到系统相册*/public class FileScanManager implements MediaScannerConnection.MediaScannerConnectionClient {public interface ScanListener {void onFinish();void onProgress(Uri uri);}private MediaScannerConnection connection;private List<File> fileList = new ArrayList<>();private ScanListener listener;private int scanIndex = 0;Context context;public FileScanManager(Context context, File file, ScanListener listener) {this.context = context;this.listener = listener;fileList.add(file);connection = new MediaScannerConnection(context, this);connection.connect();}public FileScanManager(Context context, List<File> files, ScanListener listener) {this.context = context;this.listener = listener ;if (null != files && !files.isEmpty())fileList.addAll(files);connection = new MediaScannerConnection(context, this);connection.connect();}@Overridepublic void onMediaScannerConnected() {scanIndex = fileList.size();for (File file : fileList) {connection.scanFile(file.getAbsolutePath(), null);}}@Overridepublic void onScanCompleted(String path, Uri uri) {listener.onProgress(uri);scanIndex--;if (scanIndex == 0) {handler.sendEmptyMessage(1);connection.disconnect();}}Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);if (null != listener)listener.onFinish();}};}

到此微信就可以读取到我们下载的图片了。

最后一步:分享到微信

 /*** @param activity* @param content* @param uris*/private static void shareToWeiXin(final Activity activity, String content, ArrayList<Uri> uris) {if (null == uris || uris.isEmpty()) return;try {ArrayList<Uri> imageUris = new ArrayList<>();Intent intent = new Intent();ComponentName comp = new ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareToTimeLineUI");intent.setComponent(comp);intent.setAction(Intent.ACTION_SEND_MULTIPLE);intent.setType("image/*");intent.putExtra("Kdescription", content);/**667版本开始不支持文本内容的转发673版本开始不支持多图转发*/intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris);activity.startActivityForResult(intent, 10);} catch (ActivityNotFoundException e) {activity.runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(activity, "您还未安装微信", Toast.LENGTH_SHORT).show();}});}}

要实现多图转发请关注: AccessibilityService(辅助服务)

源码下载地址:https://download.csdn.net/download/siyujiework/11109346

如何将下载的图片扫描到系统相册?附带:微信转发多图相关推荐

  1. Android 通过开源框架实现加载网络图片并下载到SD卡通知系统相册显示,(并实现分享图片功能)

    首先看下本 demo实现的功能 1:实现网络图片的加载显示 2:点击图片底部弹出popupwindow 3:点击分享 实现单个图片分享到:微信,朋友圈,QQ,QQ控件(调用系统) 4:点击下载 实现图 ...

  2. Android 网络图片下载保存本地及插入系统相册

    一.保存图片到本地 public static void saveToSystemGallery(Context context, Bitmap bmp) {// 首先保存图片File appDir ...

  3. php完美实现下载远程图片保存到本地(保存微信头像)

    2019独角兽企业重金招聘Python工程师标准>>> /** * php完美实现下载远程图片保存到本地 * @param: 文件url,保存文件目录,保存文件名称,使用的下载方式 ...

  4. php下载 微信头像图片_php完美实现下载远程图片保存到本地(保存微信头像)...

    /** * php完美实现下载远程图片保存到本地 * @param: 文件url,保存文件目录,保存文件名称,使用的下载方式当保存文件名称为空时则使用远程文件原来的名称 * @date: 2017-0 ...

  5. 将图片保存到系统相册

    // 在保存完图片之后通知图库更新 sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,Uri.parse("fil ...

  6. React Native - 使用CameraRoll将图片保存到本地相册

    PS: 以下内容经过本人亲自尝试 证明在IOS设备上简单有效 // IOS需要授权认证才允许保存图片,非常重要,记得配置: 由于苹果安全策略更新,还需要在 Info.plist 配置请求照片相的关描述 ...

  7. Android 手机下载图片保存本地后,系统相册无法查看

    下载图片到本地,由于没有通知系统相册,更新数据,导致系统相册无法找到这张图片. 处理方法一:已知图片保存地址,通过广播通知系统相册, 更新数据. public static void sendBroa ...

  8. 微信小程序 下载图片或视频保存到手机系统相册

    //downloadSaveFile.js/*** 下载单个文件* @param {string} [type]* @param {string} url* @callback successCall ...

  9. 前端如何实现微信扫描二维码下载应用,根据手机系统跳转不同页面

    菜花记录 前端如何实现微信扫描二维码下载应用,根据手机系统跳转不同页面 需求 :由于微信扫码无法直接下载需要再跳转到浏览器下载,所以微信扫码页面添加背景图和相关提示 草料二维码生成器地址 整改之前: ...

最新文章

  1. Sentry--错误日志收集框架
  2. 让linux启动更快的方法
  3. 【angular5项目积累总结】列表多选样式框(1)
  4. html公共模块提取出去,webpack 填坑之路--提取独立文件(模块)
  5. Prompt-based Language Models:模版增强语言模型小结
  6. 换工作了,开始用金蝶的BOS了,好多东西都要学啊!
  7. sublime text3搭建react native
  8. android菜单动画,利用 android studio 制作一个菜单动画
  9. 简单干净的C#方法设计案例:SFCUI.AjaxValue()之三
  10. OpenCV图像处理--opencv摄像头播放视频
  11. 动态规划之详细分析0-1背包问题
  12. wps序号打乱重新排序_wps表格 已经排好序号 ,顺序错误,想重新排列
  13. 公众号获取openid
  14. MYSQL安装以及登录问题_飘云羽逸_新浪博客
  15. Cisco wlan controlller配置
  16. 【论文导读】Continuity Scaling: A Rigorous Framework for Detecting andQuantifying Causality Accurately
  17. (CodeForce) C. Edgy Trees (并查集)
  18. ADB interface 驱动下载,以及使用,Because an app is obscuring a permission request settings can’t verify your
  19. 云服务器上部署仿牛客网项目
  20. StopWatch使用注意S

热门文章

  1. RTSP、HTTP、HTTPS、SDP四种协议详解
  2. 新会议工具Skype Meetings,专为小型企业定制
  3. E-study新人快速入门
  4. 在windowsXP 上成功安装moodle
  5. 【openpyxl】操作单元格,获取单个或多个单元格并修改数据、合并单元格、删除行列、移动单元格
  6. 优酷大数据 OLAP 技术选型
  7. 蒲公英服务器网站,蒲公英服务器端-蒲公英服务器端 v1.1.0.32656 官方版-CE安全网...
  8. 计算机云开头的词语,云字开头的成语
  9. Day8_ElectronicAlbum
  10. chapter3 Python 列表