Update
微信升級(jí)到6.7.3以后多圖分享已經(jīng)徹底不能用了,具體可參考我的另一篇文章《微信6.7.3版本后無法多圖分享的分析》
Update
無標(biāo)題的問題可以通過AccessibilityService解決,親測(cè)有效。但不是很推薦這種解決辦法。
背景
之前做的一個(gè)安卓app可以把多張圖片和文字標(biāo)題分享到微信朋友圈。最近微信版本升級(jí)到6.6.7以后發(fā)現(xiàn)圖片還可以分享,但是標(biāo)題不見了。如圖所示:

紅框內(nèi)本來應(yīng)該顯示的是和圖片一起分享過去的一段文字?,F(xiàn)在顯示不出來了。也有一些同學(xué)通過后臺(tái)問我這個(gè)問題。那么讓我們來看看微信做了什么樣的改動(dòng)導(dǎo)致這個(gè)現(xiàn)象的。
圖文分享的代碼
我們先來看看圖文分享到朋友圈的代碼
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("image/*");
ComponentName comp = new ComponentName("com.tencent.mm",
"com.tencent.mm.ui.tools.ShareToTimeLineUI");
intent.setComponent(comp);
intent.setAction("android.intent.action.SEND_MULTIPLE");
intent.setType("image/*");
//這個(gè)就是標(biāo)題了
intent.putExtra("Kdescription", “多圖分享的標(biāo)題”);
intent.putExtra(Intent.EXTRA_STREAM, paths);
context.startActivity(intent);
可見微信那邊的接收方是"com.tencent.mm.ui.tools.ShareToTimeLineUI"。標(biāo)題就是放在"Kdescription"這個(gè)字段里傳給微信的。標(biāo)題顯示不出來,那肯定是微信新版本對(duì)"Kdescription"的解析發(fā)生了變化。
朔源
為了搞清楚問題出在哪里,我們需要看一下微信6.6.7和之前的版本有什么變化。那么,讓我們請(qǐng)出JADX大法師。先讓大法師對(duì)老版本的微信施法,這里我們選擇微信6.6.6。一陣煙霧之后。讓我們看看ShareToTimeLineUI這個(gè)類是如何獲取到文本的。

函數(shù)
s.j()就是intent.getStringExtra()包了一層。那6.6.7版本的微信這里變成什么樣了呢?我們?cè)僬?qǐng)出JADX大法師對(duì)微信6.6.7施法。結(jié)果同樣的位置變成了如下這個(gè)樣子:

看到區(qū)別了嗎?獲取從intent中獲取字符串的key從
"Kdescription"變成了e$h.thz!那么這個(gè)
e$h.thz是個(gè)什么鬼?它長(zhǎng)這樣:
它就是在原來
"Kdescription"后面又拼接了個(gè)System.currentTimeMillis()。。。至此真相大白了。原來是key變了導(dǎo)致我們發(fā)送的標(biāo)題在微信這邊取不到。如果有同學(xué)說我在構(gòu)造Intent的時(shí)候也用同樣的key不就可以了嗎?
...
intent.putExtra("Kdescription" + System.currentTimeMillis(), “多圖分享的標(biāo)題”);
...
。。。。。。我勸你再想想。
如果你有黑科技可以在分享之前從微信獲取到e$h.thz的值,請(qǐng)告訴我。
退一步的解決辦法是在分享圖片的同時(shí)把標(biāo)題復(fù)制到剪貼板里,這樣用戶在分享的頁面多操作一步粘貼一下就好了。
總結(jié)
這個(gè)“ Kdescription”應(yīng)該算是微信的一個(gè)未對(duì)外公開的接口協(xié)議。我們之前利用它來做圖文分享是利用了這個(gè)隱藏功能。新版本做的這個(gè)改動(dòng)導(dǎo)致其不可用,這也沒什么好辦法。教訓(xùn)就是當(dāng)我們想利用一些第三方的不公開功能的時(shí)候要慎重,以免將來掉坑里難受。