Android调用微信原生分享接口,进入微信分享界面返回不了!
2017-04-01 15:16
721 查看
今天测试员发现一个bug,分享停在微信界面,返回不了了,我擦!我就慢慢排除bug······首先图片符合微信分享限制的大
jpeg图片如下:
png图片格式如下:
这是我调用微信原生分享的代码:
分享的图片链接我是用Glide转换成Bitmap再转换成byte[]的
调用share方法的代码:
但是后台配置的图片缺少了http开头,所以调用
这个是我写的递归压缩图片,小于微信要求的32K大小,仍有不足之处,如果每次质量压缩都减10,减到0还是大于32K就不行了,有待优化。代码如下:
public static final int THUMB_LENGTH_LIMIT = 32768;(32K);后来我换一张本地图片就成功发返回了,神奇了,我就仔细的寻找原因,是因为这张图片导致的,如果图片是jpeg格式的话就会出现这种返回不了的情况,是png的话就正常!这是个坑。
jpeg图片如下:
png图片格式如下:
这是我调用微信原生分享的代码:
/** * 分享网页 * 直接调用微信原生sdk分享接口 * @param which 0:分享微信好友 1:分享微信朋友圈 2:分享微信收藏 * @param bitmaps 需要分享的原图 * @param isNull 突图片是否有效 true:表示图片有效 */ private void share(int which,Bitmap bitmaps ,Boolean isNull) { WXWebpageObject webpage = new WXWebpageObject(); webpage.webpageUrl = url; //分享的url WXMediaMessage msg = new WXMediaMessage(webpage); msg.title = title; //分享的标题string msg.description = contents; //分享的内容string //msg.thumbData = btye[] //分享的图片url if(isNull) { msg.thumbData = BitmapUtil.zoomImage(bitmaps,100);//质量压缩32K }else{ //默认图片 Bitmap bitmap_icon = BitmapFactory.decodeResource(getResources(),R.drawable.icon_share); msg.thumbData = BitmapUtil.zoomImage(bitmap_icon,100);//质量压缩32K } SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = "webpage" + System.currentTimeMillis(); req.message = msg; if (which == 0) { req.scene = SendMessageToWX.Req.WXSceneSession;//发送到好友界面 } else if (which == 1) { req.scene = SendMessageToWX.Req.WXSceneTimeline;//发送到朋友圈 } else if (which == 2) { req.scene = SendMessageToWX.Req.WXSceneFavorite;//添加到微信收藏 } IWXAPI api = WXAPIFactory.createWXAPI(MainActivity.this, Constants.APP_ID); api.sendReq(req); }
分享的图片链接我是用Glide转换成Bitmap再转换成byte[]的
调用share方法的代码:
Glide.with(MainActivity.this).load(img).asBitmap().into(new SimpleTarget<Bitmap>() { @Override public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) { share(which,resource,true); } @Override public void onLoadFailed(Exception e, Drawable errorDrawable) { share(which, null,false); super.onLoadFailed(e, errorDrawable); } });
但是后台配置的图片缺少了http开头,所以调用
share(which, null,false);这个方法就调用了解析本地图片的资源,就碰到了jpeg图片这个坑。
这个是我写的递归压缩图片,小于微信要求的32K大小,仍有不足之处,如果每次质量压缩都减10,减到0还是大于32K就不行了,有待优化。代码如下:
/*** * 分享微信 质量压缩 宽高不变 * @param bgimage 源图片资源 * @param quality 压缩的质量 * @return byte[] 字节数组 */ public static byte[] zoomImage(Bitmap bgimage, int quality) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); bgimage.compress(Bitmap.CompressFormat.JPEG, quality, baos);//压缩 byte[] bytes = baos.toByteArray(); //Log.e("--->wechat", "压缩后,bytes.length=" + bytes.length + ",quality=" + quality); if (baos.toByteArray().length >= WXMediaMessage.THUMB_LENGTH_LIMIT) { bytes = zoomImage(bgimage, quality - 10); } return bytes; }
相关文章推荐
- 同一个界面内取微信的OPENID和调用微信的分享接口
- Qt for Android 调用android原生接口分享图片或文字
- 同一个界面内取微信的OPENID和调用微信的分享接口
- android 不调用微信,易信等SDK实现实现一键分享图片文字到微信,易信,以及全部可选app
- android调用系统的分享接口
- unity调用android原生接口
- Android调用微信登陆、分享、支付
- JAVA-微信调用自定义分享接口
- Android 微信的回调跨进程间的调用 (分享)
- Android调用微信登陆、分享、支付
- 关于Android app首次安装完成后在安装界面直接“打开”应用再按home键返回桌面,重新进入app重复实例化launcher activity的问题的解决
- Android-java调用本地方法返回字符串显示在界面上/NDK-JNI开发实例(二)
- 关于Android app首次安装完成后在安装界面直接“打开”应用再按home键返回桌面,重新进入app重复实例化launcher activity的问题的解决
- Android系统调用新浪微博、腾讯微博、开心、人人网分享接口
- 关于Android app首次安装完成后在安装界面直接“打开”应用再按home键返回桌面,重新进入app重复实例化launcher activity的问题的解决
- Android系统调用短信、电子邮件、蓝牙、社交网站等分享接口
- Android 仿微信的应用进入界面
- 微信JS接口 分享到朋友圈 分享给朋友 分享到QQ 拍照或从手机相册中选图 识别音频并返回识别结果 使用微信内置地图查看位置
- 微信开发笔记-调用自定义分享接口
- Android之调用微信登陆、分享、支付