1. 程式人生 > >Android整合微信分享,由於分享的縮圖大於32K,而無法調起微信客戶端

Android整合微信分享,由於分享的縮圖大於32K,而無法調起微信客戶端

在專案中整合微信分享功能,分享的是一個連結,帶有圖片和標題。
按照微信開放平臺網頁型別分享示例,進行程式碼編寫,但是點選分享
始終無法調起微信客戶端。

  /**
     * 微信分享到好友(聊天介面)
     */
    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();
    }

總結:

整合微信分享,要保證分享的圖片大小不能超過32K