友盟分享純圖片到微信
需求是這樣的,點選按鈕直接將不包含內容的純圖片分享給微信好友或者分享到朋友圈。
通過查詢友盟官網文件,發現只需要去除分享內容即shareContent的賦值就可以實現。
我們可以在程式碼中發現,weixinContent.setShareImage(localImage);中的localImage的型別可以是String、int、byte[]、File、Bitmap。之前全部分享時,圖片這兒用的是int和String型別,並且需要進行純圖片分享的圖片都是後臺動態返回的,所以用String是再好不過的,直接將圖片url轉成UMImage型別:
UMImage img = new UMImage(BigPicActivity.this, imageUrlStr);
mController.setShareImage(img);
但是令人髮指的事情發生了,竟然無法分享成功!這原本是不可能發生的。因為之前全分享(分享標題、連結、內容、圖片)也用的String 型別的,沒道理這兒不行。我試著寫死分享的圖片,發現可以分享成功!那麼問題來了,這說明純圖片分享不能使用String型別的圖片連結。
雖然使用R.drawable.logo這樣的int型別可以分享成功,但是無法實現分享後臺動態返回的圖片。我陷入了深深的沉思。。。那麼UMImage()的構造方法需要的引數型別中,排除int/String後,能用的也就是Bitmap了,而imageView.getDrawableCache()返回一個Bitmap型別的圖片快取,應該是可以的吧?試試!還是不行!
事情到這裡變得詭異起來。
到底是哪裡出了問題?
試了很多次都不行,最後同事想到,把圖片url轉成Bitmap,死馬當活馬醫。因為感覺跟之前的getDrawableCache()沒什麼大的區別。但是沒想到竟然分享成功了!下面把程式碼貼出來:
URL url = new URL(imageUrl);
URLConnection conn = url.openConnection();
conn.connect();
InputStream in = conn.getInputStream();
Bitmap bm = BitmapFactory.decodeStream(in);
UMImage img = new UMImage(BigPicActivity.this, bm);
mController.setShareImage(img);
分享只寫了微信好友的賦值,朋友圈這裡就不寫了。
------------我是可恥的分割線------2016-10-26更新----------------------------------------
在上線的晚上,測出一個bug,先分享一篇文章(全分享)到微信,然後分享一張純圖片到微信,會發現後者仍然分享的是之前的文章,而圖片去哪兒了?
分享內容的賦值呼叫的是不同的方法,根本不可能發生這種情況,但是確實發生了,這必須是哪裡出問題了!我瞬間想到,當時寫純圖片分享的時候,為了省事,只給圖片賦值,沒有設定分享標題和分享目標url,沒有嚴格按照官方文件來走。雖然覺得應該不是這兒,但是還是加上這兩個方法重新測試,解決了!
說實話,到現在也不知道為什麼分享標題和分享url的缺失會導致分享內容的覆蓋,但有一點經驗得記住,以後開發中,要嚴格按照文件來操作,不得馬虎!
作為一個菜鳥,收穫不少經驗。最重要一點就是不要放棄嘗試,在不影響專案進度的情況下一定要堅持自己研究。
此後如竟沒有炬火,我便是唯一的光。