一聚教程网:一个值得你收藏的教程网站

热门教程

安卓开发之如何在微信分享中加载网络图片作为缩略图

时间:2022-06-25 23:38:11 编辑:袖梨 来源:一聚教程网

这几天在做的一个项目是有一个分享到微信的功能,要实现在分享中添加标题、描述、链接、缩略图实现分享。先来看一下官方的API文档:

网页类型分享示例:

//初始化一个WXWebpageObject对象,填写url
WXWebpageObject webpage = new WXWebpageObject();
webpage.webpageUrl = "网页url";
//用WXWebpageObject对象初始化一个WXMediaMessage对象,填写标题、描述
WXMediaMessage msg = new WXMediaMessage(webpage);
msg.title = "网页标题";
msg.description = "网页描述";
Bitmap thumb = BitmapFactory.decodeResource(getResources(), R.drawable.send_music_thumb);
msg.thumbData = Util.bmpToByteArray(thumb, true);
 //构造一个Req
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("webpage");//transaction字段用于唯一标识一个请求
req.message = msg;
req.scene = isTimelineCb.isChecked() ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession;
//调用api接口发送数据到微信
api.sendReq(req);

缩略图的设置,就是这一行代码:

msg.thumbData=某bitmap
可见,官方的API只提供了加载本地资源图片的示例,并没有给出加载网络图片作为缩略图的示例代码,当然也很容易实现,只要我们把网络图片转换为Bitmap对象就可以了,可是,当我使用自定义的Bitmap时候,却总是报错,并且报错也不给出任何提示信息,最后才知道微信分享缩略图(thumb)最大64KB,居然有这么一个限制,所以只好做一些处理了。所有实现代码如下:

网络图片转换为Bitmap对象代码:

/**
 * 把网络资源图片转化成bitmap
 * @param url  网络资源图片
 * @return  Bitmap
 */
public static Bitmap GetLocalOrNetBitmap(String url) {
    Bitmap bitmap = null;
    InputStream in = null;
    BufferedOutputStream out = null;
    try {
        in = new BufferedInputStream(new URL(url).openStream(), 1024);
        final ByteArrayOutputStream dataStream = new ByteArrayOutputStream();
        out = new BufferedOutputStream(dataStream, 1024);
        copy(in, out);
        out.flush();
        byte[] data = dataStream.toByteArray();
        bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
        data = null;
        return bitmap;
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }
}

private static void copy(InputStream in, OutputStream out)
        throws IOException {
    byte[] b = new byte[1024];
    int read;
    while ((read = in.read(b)) != -1) {
        out.write(b, 0, read);
    }
}

然后把示例代码里的那两行改为如下即可:

Bitmap thumb =Bitmap.createScaledBitmap(GetLocalOrNetBitmap("某网络资源图片"), 120, 120, true);//压缩Bitmap
msg.thumbData = Util.bmpToByteArray(thumb, true);

问题解决,成功实现微信分享。

热门栏目