Android整合微信分享,由於分享的縮圖大於32K,而無法調起微信客戶端
阿新 • • 發佈:2019-02-15
在專案中整合微信分享功能,分享的是一個連結,帶有圖片和標題。
按照微信開放平臺網頁型別分享示例,進行程式碼編寫,但是點選分享
始終無法調起微信客戶端。
/**
* 微信分享到好友(聊天介面)
*/
public static void wechatShareToSceneSession(String webpageUrl, String title, String description, byte[] thumbData) {
WXWebpageObject webpageObject = new WXWebpageObject();
webpageObject.webpageUrl = webpageUrl;
WXMediaMessage msg = new WXMediaMessage(webpageObject);
msg.title = title;
msg.description = description;
msg.thumbData = thumbData;
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("webpage");
req.message = msg;
req.scene = WXSceneSession;
MyApplication.mIWXApi.sendReq(req);
}
通過除錯發現MyApplication.mIWXApi.sendReq(req)始終返回false,
所以無法調起微信客戶端。
檢視微信開放平臺中的常見問題(Android),發現微信客戶端沒有被調起,有以下幾個原因:
根據以上幾個問題進行檢查:
(1)微信客戶端確定是已經安裝的了
(2)因為之前已經集成了微信的登入功能了,所以簽名和包名也可以確定是正確的。
前兩個原因排除了,那麼第三個傳送的縮圖超過32K可能是導致調起微信客戶端失敗的原因。
在專案的程式碼中是直接將從伺服器請求到的圖片資料進行分享,並沒有對圖片做任何處理。於是在網上找到了一個圖片壓縮工具類,在圖片超過32K的時候對圖片進行壓縮。
果然點選分享成功調起了微信客戶端,併成功進行了分享。
下面給出圖片壓縮的程式碼:
/**
* Bitmap轉換成byte[]並且進行壓縮,壓縮到不大於maxkb
* @param bitmap
* @param IMAGE_SIZE
* @return
*/
public static byte[] bitmap2Bytes(Bitmap bitmap, int maxkb) {
ByteArrayOutputStream output = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, output);
int options = 100;
while (output.toByteArray().length > maxkb&& options != 10) {
output.reset(); //清空output
bitmap.compress(Bitmap.CompressFormat.JPEG, options, output);//這裡壓縮options%,把壓縮後的資料存放到output中
options -= 10;
}
return output.toByteArray();
}