Skip to content Skip to footer

解决 App 内无法分享大图到微信的问题

问题

App 中有一个分享图片到微信的功能,但是对于大图片就无法正常跳转到微信,查看 logcat 日志会如下问题:

原因分析

1、什么才算是大图?

经过验证,将图片压缩到 500kb 左右时可以分享成功。

2、微信有没有限制图片大小 查看微信文档:https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Share_and_Favorites/Android.html

排除是微信限制图片大小的问题。

3、错误日志

“FAILED BINDER TRANSACTION”错误通常发生在进程间通信(IPC)时,特别是在Android系统中。Binder是Android IPC机制的一部分,允许不同的应用程序组件(如活动、服务、广播接收器等)以及系统服务之间进行通信。当尝试通过Binder发送的数据超过系统限制时,就会触发这个错误。 导致这个错误的主要原因包括:

数据大小限制:Binder有一个大小限制,通常是最多1MB。如果尝试通过Binder发送超过这个限制的数据,就会出现错误。

并发问题:在高并发场景下,如果有大量请求同时尝试通过Binder进行通信,可能会导致系统资源不足,从而触发错误。

内存限制:在某些情况下,即使发送的数据量没有超过Binder的限制,如果接收方没有足够的内存来处理这些数据,也可能导致错误。

原因基本就知道了:微信分享图片会使用 Intent 传值,而 Intent 传值有大小限制

解决办法

1、压缩图片

既然是图片数据大导致的,那就压缩就完了。

private static byte[] bitmapResizeGetBytes(Bitmap image, int size) {

ByteArrayOutputStream baos = new ByteArrayOutputStream();

// 质量压缩方法,这里100表示第一次不压缩,把压缩后的数据缓存到 baos

image.compress(Bitmap.CompressFormat.JPEG, 100, baos);

int options = 100;

// 循环判断压缩后依然大于size 则继续压缩

while (baos.toByteArray().length / 1024 > size) {

// 重置baos即清空baos

baos.reset();

if (options > 10) {

options -= 8;

} else {

return bitmapResizeGetBytes(Bitmap.createScaledBitmap(image, 280, image.getHeight() / image.getWidth() * 280, true), size);

}

// 这里压缩options%,把压缩后的数据存放到baos中

image.compress

Copyright © 2088 初试游戏活动中心-热门网游最新资讯发布平台 All Rights Reserved.
友情链接