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() {@Overridepublic 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
转载于:https://www.cnblogs.com/wcLT/p/8890551.html
android 实现微信分享多张图片的功能相关推荐
- android 微信分享多张图片大小,Android 关于微信分享图片过大失败的解决方案
android 关于微信分享图片过大失败的解决方案.这是因为微信对缩略图做了限制,最大不超过32k. 所以可以先通过图片加载工具获取bitmap,然后进行压缩,压缩方法如下: //压缩图片 publi ...
- android 程序a启动程序b的权限,android app微信分享
android app微信分享 积分: 22 智慧币 积分: 2 智慧币 [0.67元 ] 包含内容: 源码,全套工具 详情描述 如遇视频不清晰,请最大化观看演示 以下仅列出部分功能,全部功能请至官网 ...
- Android之微信分享
Android之微信分享 现在的项目中要用到微信分享,弄了两天才弄好,开始的时候是下载微信的sdk和demo,将demo放到eclipse上跑起来后发现不能分享,都是一闪就结束程序了,后来发现我们要将 ...
- android之微信分享音频
android之微信分享音频 代码: WXMusicObject muObj = new WXMusicObject(); muObj.musicUrl = "http://music.ba ...
- android之微信分享图片
android之微信分享图片 微信图像分享分为三类1.二进制图片2.本地图片3.URL地址图片 XML分析:三个Button 添加点击事件! 注意清单文件 权限 <uses-permission ...
- Android 添加微信分享三种实现方案
Android 添加微信分享三种方案 使用android的intent实现应用程序之间的通信,将信息通过intent传递给微信.这种方式的局限性在于 a.只能发送图片,而不是文字或者图片+文字. b. ...
- android仿微信语音聊天功能,Android仿微信发送语音消息的功能及示例代码
微信的发送语音是有一个向上取消的,我们使用ontouchlistener来监听手势,然后做出相应的操作就行了. 直接上代码: //语音操作对象 private mediaplayer mplayer ...
- android 同时实现微信分享和微信登录功能
Android应用实现微信登录与分享 1. 闲话(可直接无视 项目慢慢的推进,逐渐的做到了微信第三方登录的功能模块了.其实我想说Orz,我等这一天等了好久了,想做个微信验证登录都等了两个多星期咧(其实 ...
- Android Studio 微信分享功能(包括可以分享到朋友圈,分享到朋友)
第一步:配置sdk 在build.gradle文件中,添加如下依赖即可: 在Android Studio中新建你的工程,并保证网络设置可以成功从jcenter下载微信SDK即可. dependenci ...
最新文章
- HDU 5972 Regular Number(ShiftAnd+读入优化)
- PetShop 4.0讨论专贴(QA)
- dSploitzANTI渗透教程之安装zANTI工具
- 左滑右滑,在VS Code里滑个妹纸给你写喜欢的代码?
- AMD的AI策略与Intel和Nvidia有何不同?
- 5 网络层----IP协议相关技术
- vs显式导入(代码注入)依赖库
- include require区别
- Python中随机森林的实现与解释
- 打破BERT天花板:11种花式炼丹术刷爆NLP分类SOTA!
- 1-8:学习shell之高级键盘技巧
- 服务器系统时间提前八小时,windows服务器时间少八小时
- ExpandListView onChildClickListener 失效
- proj编译linux,在Ubuntu上安装proj 投影转换程序
- 编写python程序、利用循环输出1+11+111+1111_《JavaScript语法基础》练习第四章第五题练习...
- 上传了一个安卓系统摄像头性能测试代码
- keep跑步记录伪造_Keep、悦跑圈、咕咚、悦动圈,四个跑步App比对
- 国产处理器的逆袭机会——RISC-V
- Steam云状态无法同步怎么办?
- Everything不显示.lnk文件
热门文章
- 嵌入式开发之davinci--- 8168 电源调试总结
- keil3如何放大字体_keil3如何设置字体 keil字体放大快捷键
- 计算机专业英语已经出版,欢迎关注
- OpenCV像素点处理 1
- sklearn快速入门教程:(四)模型自动调参
- hall's marriage theorem
- Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建胜过Apache十倍的Web服务器(第6版)
- Zookeeper 服务注册与发现01——服务提供者
- Express 的简单使用
- 用javascript模拟分子扩散并思考熵与序