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