Android调用微信原生分享接口,进入微信分享界面返回不了!

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Song_74110/article/details/68944836

今天测试员发现一个bug,分享停在微信界面,返回不了了,我擦!我就慢慢排除bug······首先图片符合微信分享限制的大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;
    }

猜你喜欢

转载自blog.csdn.net/Song_74110/article/details/68944836
今日推荐