Android 微信 图片无法分享

📅 2026/8/2 18:53:10
Android 微信 图片无法分享
最近在做微信分享的功能图片分享小程序分享由于图片的原因有的图片总是分享不出去。于是对这块进行了一些深入分析分析过程1、关于进程间通信经过查看log日志发现已经调用了微信的WXEntryActivity并且我的App Activity 已经paused但是没有跳到微信的分享界面Activity 会马上resumed。在log中看到这样的信息2020-03-3117:43:15.68411722-11722/com.icisoo.xwD/MicroMsg.SDK.MMessageAct:send,targetPkgNamecom.tencent.mm,targetClassNamecom.tencent.mm.plugin.base.stub.WXEntryActivity2020-03-3117:43:15.68711722-11722/com.icisoo.xwE/JavaBinder:!!!FAILEDBINDERTRANSACTION!!!(parcel size1729212)2020-03-3117:43:15.68711722-11722/com.icisoo.xwE/MicroMsg.SDK.MMessageAct:send fail,exFailurefrom system那问题基本就清楚了进程间通信的数据过大根据官方文档介绍不能超过1M1729212 超过1M了。在实际的测试中发现parcel size 543818 在华为pixel2是不能分享的但是oppo手机是可以分享的。网上看到有人猜测国内rom限制是512k。看过Binder源码的同学一定清楚传输数据大小的限制取决于mmap 映射的大小总的来说知道问题出现这里了只要够小就一定能够分享出去。但是在对图片压缩的时候又遇到一些问题2、关于图片测试发现有的图片分享不了。大小尺寸都和其他的图片都一样只有dpi不一样。不能分享的图片水平/垂直分辨率是72dpi其他是96 dpi。后来用PS把位深度改为96dpi 每英寸上的像素点变多所以分辨率就会变大尺寸和其他图片一样结果还是无法分享。android中图片是以bitmap形式存在的那么bitmap所占内存直接影响到了应用所占内存大小首先要知道bitmap所占内存大小计算方式图片长度 x 图片宽度 x 一个像素点占用的字节数关于bitmap的介绍可以参考这篇文章Bitmap压缩只要对图片进行压缩让他占用的内存小一点就可以正常分享了下面介绍几种bitmap压缩的方法1.质量压缩ByteArrayOutputStreambaosnewByteArrayOutputStream();intqualityInteger.valueOf(editText.getText().toString());bit.compress(CompressFormat.JPEG,quality,baos);byte[]bytesbaos.toByteArray();bmBitmapFactory.decodeByteArray(bytes,0,bytes.length);Log.i(wechat,压缩后图片的大小(bm.getByteCount()/1024/1024)M宽度为bm.getWidth()高度为bm.getHeight()bytes.length (bytes.length/1024)KBqualityquality);未完待续。。。在Android中把bitmap 转为byte[] byte[] 的大小和这张图片的大小、尺寸两者有关系参考JavaBinder: !!! FAILED BINDER TRANSACTION !!! 异常的解决方案分析bitmap的六种压缩方式Android图片压缩