Android 微信 圖片無法分享

最近在做微信分享的功能,圖片分享,小程序分享,由於圖片的原因,有的圖片總是分享不出去。於是對這塊進行了一些深入分析

分析過程

1、關於進程間通信

經過查看log日誌,發現已經調用了微信的WXEntryActivity,並且我的App Activity 已經paused,但是沒有跳到微信的分享界面,Activity 會馬上resumed。

在log中看到這樣的信息

2020-03-31 17:43:15.684 11722-11722/com.icisoo.xw D/MicroMsg.SDK.MMessageAct: send, targetPkgName = com.tencent.mm, targetClassName = com.tencent.mm.plugin.base.stub.WXEntryActivity
2020-03-31 17:43:15.687 11722-11722/com.icisoo.xw E/JavaBinder: !!! FAILED BINDER TRANSACTION !!!  (parcel size = 1729212)
2020-03-31 17:43:15.687 11722-11722/com.icisoo.xw E/MicroMsg.SDK.MMessageAct: send fail, ex = Failure from system

那問題基本就清楚了,進程間通信的數據過大,根據官方文檔介紹不能超過1M(1729212 超過1M了)。

在實際的測試中發現,parcel size = 543818 在華爲,pixel2,是不能分享的,但是oppo手機是可以分享的。網上看到,有人猜測,國內rom限制是512k。

總的來說,知道問題出現這裏了,只要夠小就一定能夠分享出去。但是在對圖片壓縮的時候,又遇到一些問題

2、關於圖片

測試發現有的圖片分享不了。大小,尺寸都和其他的圖片都一樣,只有dpi不一樣。

不能分享的圖片水平/垂直分辨率是72dpi,其他是96 dpi。後來用PS把位深度改爲96dpi(發現圖片的分辨率會自動變大),尺寸和其他圖片一樣,結果還是無法分享。

android中圖片是以bitmap形式存在的,那麼bitmap所佔內存,直接影響到了應用所佔內存大小,首先要知道bitmap所佔內存大小計算方式:

圖片長度 x 圖片寬度 x 一個像素點佔用的字節數

關於bitmap的介紹可以參考這篇文章

Bitmap壓縮

只要對圖片進行壓縮,讓他佔用的內存小一點,就可以正常分享了,下面介紹幾種bitmap壓縮的方法,

1.質量壓縮

   ByteArrayOutputStream baos = new ByteArrayOutputStream();
   int quality = Integer.valueOf(editText.getText().toString());
   bit.compress(CompressFormat.JPEG, quality, baos);
   byte[] bytes = baos.toByteArray();
   bm = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
   Log.i("wechat", "壓縮後圖片的大小" + (bm.getByteCount() / 1024 / 1024)
                    + "M寬度爲" + bm.getWidth() + "高度爲" + bm.getHeight()
                    + "bytes.length=  " + (bytes.length / 1024) + "KB"
                    + "quality=" + quality);

未完待續。。。

在Android中把bitmap 轉爲byte[] ,byte[] 的大小和這張圖片的大小、尺寸兩者有關係

參考:
JavaBinder: !!! FAILED BINDER TRANSACTION !!! 異常的解決方案分析

bitmap的六種壓縮方式,Android圖片壓縮

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章