這幾天在做的一個項目是有一個分享到微信的功能,要實現在分享中添加標題、描述、鏈接、縮略圖實現分享。先來看一下官方的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);
問題解決,成功實現微信分享。