android 实现微信分享多张图片的功能
昨天公司老大通知客户改需求了,原来的微信分享改成分享多张图片,然后屁颠屁颠跑到微信平台看了以后
心里千万只草泥马狂奔而过,微信平台没有提供分享多张的SDK有木有啊,我们只能自己调用系统自带的分享功能实现。
这儿我先讲下流程,后面会附上源码。
首先我们讲下调起微信分享的方法。其实方法都是一样的,没有太大的区别。
//com.tencent.mm.ui.tools.ShareImgUi 是分享到微信好友
//com.tencent.mm.ui.tools.ShareToTimeLineUI 是分享到微信朋友圈
//intent.put("kdescription","分享朋友圈的图片说明");
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(Uri) imageUris = new ArrayList<Uri>();
for(File f : files){
imageUris.add(Uri.fromFile(f));
}
intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM,imageUris);
startActivity(intent);
其实来说分享的代码很简单。但是实际操作中就跳了更多的坑,我一个一个的记录下来。
实际分享的时候因为是调用系统本地的分享功能,所以分享的图片也就必须要存到本地,不然就会提示获取资源失败,只支持分享到朋友圈等等的问题。
那就要把图片存到本地了,这个方法网上也有很多,我这儿就直接用了网上一个朋友的代码,然后稍微修改了一下,后面附上代码。
因为考虑到如果存的图片太多就太占内存了,所以最多设置分享9张,每次调起分享的时候都会从iv_share_1.jpg开始
这个是直接调用微信的分享,所以调起分享的时候一定要判断手机里面是否已经安装了微信,如果没有安装还要掉微信分享就是直接崩溃掉。
都到了这一步就已经能调起微信的多张图片分享了,但是其中还是会有一个坑,也是卡了我不少时间。那就是android N系统以后分享的链接用file://.....
的时候会出现一个异常android.os.FileUriExposedException。网上虽然很多朋友都给出了用 v4包中的FileProvider来解决,但是不知道为什么,反正我的
项目导入后就报错了,最后在网上找了另一个方法在项目的BaseApplication的onCreate中用VmPolicy的方法解决。
//解决android N(>=24)系统以上分享 路径为file://时的 android.os.FileUriExposedException异常
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
}
到这儿以后就搞定了微信的多张图片分享。下面就贴出我的代码,希望对大家有所帮助。
布局中就放入了两个按钮,通过按钮传递一个参数判断是分享朋友圈还是微信好友
MainActivity中的代码
/**
*
* @param flag 0分享给微信好友 1分享到朋友圈
*/
private void shareImage(final int flag) { //判断是否安装微信,如果没有安装微信 又没有判断就直达微信分享是会挂掉的
if (!Tools.isWeixinAvilible(mContext)){
Toast.makeText(MainActivity.this, "您还没有安装微信", Toast.LENGTH_SHORT).show(); }else{ new Thread(new Runnable() {
@Override
public void run() {
//这一步一定要clear,不然分享了朋友圈马上分享好友图片就会翻倍
files.clear(); try { for (int i = 0; i < stringItem.length; i++) {
File file = Tools.saveImageToSdCard(mContext, stringItem[i]);
files.add(file);
} Intent intent = new Intent();
ComponentName comp; if (flag == 0) {
comp = new ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareImgUI");
} else {
comp = new ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareToTimeLineUI");
intent.putExtra("Kdescription", "分享朋友圈的图片说明");
}
intent.setComponent(comp);
intent.setAction(Intent.ACTION_SEND_MULTIPLE);
intent.setType("image/*"); ArrayList<Uri> imageUris = new ArrayList<Uri>();
for (File f : files) {
imageUris.add(Uri.fromFile(f));
} intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris);
startActivity(intent);
}catch (Exception e){
e.printStackTrace();
}
}
}).start(); } }
然后就是调用Tools工具类中的或取临时保存的图片的地址。
public static String IMAGE_NAME = "iv_share_";
public static int i =0; //根据网络图片url路径保存到本地
public static final File saveImageToSdCard(Context context, String image) {
boolean success = false;
File file = null;
try {
file = createStableImageFile(context); Bitmap bitmap = null;
URL url = new URL(image);
HttpURLConnection conn = null;
conn = (HttpURLConnection) url.openConnection();
InputStream is = null;
is = conn.getInputStream();
bitmap = BitmapFactory.decodeStream(is); FileOutputStream outStream; outStream = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, outStream);
outStream.flush();
outStream.close();
success = true;
} catch (Exception e) {
e.printStackTrace();
} if (success) {
return file;
} else {
return null;
}
} //创建本地保存路径
public static File createStableImageFile(Context context) throws IOException {
i++;
String imageFileName =IMAGE_NAME + i+ ".jpg";
File storageDir = context.getExternalCacheDir();
File image = new File(storageDir, imageFileName);
return image;
}
至于判断是否安装了微信这个大家在网上随便搜搜都能找到。
这样就大功告成了。分享都不用去等待微信平台的审核了。但是因为是调用系统的分享,所以也有不足的地方,那就是没有回调。
地址:https://github.com/XW837156540/ShareMoreImage
https://blog.csdn.net/XuWei1213/article/details/78547684
android 实现微信分享多张图片的功能的更多相关文章
- Android集成微信分享功能应用签名生成方法及分享不生效的问题
通过友盟sdk集成微博.微信.qq等分享功能时,微博和qq很顺利,但在做微信集成时一直不成功.主要问题还是之前在微信开放平台申请创建移动应用时,对应用签名没有填写对,走了很多弯路现总结出来,加深记忆避 ...
- Android实现微信分享及注意事项
一.获取帮助文档并下载相关资料 首先打开微信开放平台:https://open.weixin.qq.com/ 如果没有注册,请先注册并上传开发者资料等待审核. 资源中心----移动应用开发----分享 ...
- Android 仿微信朋友圈发动态功能(相册图片多选)
代码分享 代码名称: 仿微信朋友圈发动态功能(相册图片多选) 代码描述: 仿微信朋友圈发动态功能(相册图片多选) 代码托管地址: http://www.apkbus.com/android-15276 ...
- Android 开发 微信分享,登陆,获取信息
1 获取appid和appsecret. https://open.weixin.qq.com/cgi-bin/index?t=home/index&lang=zh_CN ...
- android接入微信分享(朋友、朋友圈)、QQ分享(好友、空间)
1.申请注册你的appid 2.下载sdk QQ: http://wiki.open.qq.com/wiki/mobile/SDK%E4%B8%8B%E8%BD%BD 微信:https://open. ...
- Android 接入微信分享错误码-6
官方的常见错误表示签名出错登录以后,需要重装微信(也就是清除微信本地数据)
- Android 微信分享解疑
from:http://blog.csdn.net/freesonhp/article/details/10756663 1.建立自己的应用 TestShareWX (1)应用包名是com.frees ...
- Android开发 对接微信分享SDK总结
原文:Android开发 对接微信分享SDK总结 - Stars-One的杂货小窝 公司项目需要对接微信分享,本来之前准备对接友盟分享的,但友盟的分享实际参数太多,而我又只需要对接一个微信分享,于是便 ...
- Android 微信分享图文资料
上个项目做Android的微信分享,需要分享的内容有图片有文字,看了微信分享的SDK,貌似没有这个API,在网上搜了好久,总算找到解决方法了,直接上代码: public void sendReq(Co ...
随机推荐
- 解决Visual C++ Redistributable for Visual Studio 2015的安装问题(摘录)
1. Visual C++ Redistributable for Visual Studio 2015系统要求:Windows 7情况下必须是Windows 7 with SP1.或者Windows ...
- python 进程和线程(代码知识部分)
二.代码知识部分 一 multiprocessing模块介绍: python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大部分情 ...
- testng XMl 参数化
方法一: 方法二: 方法三: (1)如果测试的数据较多的情况下,很显然这种方式不适合,那么可以通过@DataProvider生成测试数据,通过@Test(dataProvider = "&q ...
- Mac下锁屏快捷键
▲先设置“进入眨眼或开始屏幕保护程序”选择”立即“要求输入密码. [系统编好设置]->[通用] ▲通过快捷键[shift+control+光驱键]或者[option+command+关机键]
- dotnet core webapi +vue 搭建前后端完全分离web架构(一)
架构 服务端采用 dotnet core webapi 前端采用: Vue + router +elementUI+axios 问题 使用前后端完全分离的架构,首先遇到的问题肯定是跨域访问.前后端可 ...
- Android:刚6瓶啤酒4两56度白酒下肚,居然20分钟做了一手机版网站 !
刚6瓶啤酒4两56度白酒下肚,居然20分钟不到时间做了一手机版网站 !人有多大潜力你知道吗? 大家有兴趣的可以用手机或微信打开 http://xh.yunxunmi.com/ 看看俺这酒后之做! 更 ...
- 使用NHibernate(1)--资料汇总
NHibernate最新版本是4.0,目前还只是alpha版,没有发布.稳定版本是3.3,项目中用的也是这个版本,所以以后的介绍都是基于这个版本的. 在网上找了一下相关的学习资料,现汇总如下: NHi ...
- (转)如何在CentOS / RHEL 7上安装Elasticsearch,Logstash和Kibana(ELK)
原文:https://www.howtoing.com/install-elasticsearch-logstash-and-kibana-elk-stack-on-centos-rhel-7 如果你 ...
- kafka多线程消费topic的问题
案例: topic:my-topic,分区:6 消费者:部署三台机器,每台机器上面开启6个线程消费. 消费结果:只有一台机器可以正常消费,另外两台机器直接输出六条告警日志: No broker par ...
- JavaScript数据结构-5.队列
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...