背景
微信語音/視頻開會,一遍聽不清楚 ?
和客戶微信語音溝通過後又忘記重點 ?
想保留和重要的人的語音音頻?
懶得用另外的設備錄音?
解決方案
既然微信沒有保存語音聊天的功能,自己加一個不就好了嗎?!
本文結束!
功能實現
1、 依賴Xposed框架(非root環境),給微信添加自定義的功能;
2、 微信語音文件(.amr格式)生成到自定義目錄
( 默認目錄:SD卡/tencent/micromsg/用戶/voice2)
3、 提供將.amr格式文件轉換成.mp3的功能;
文末附源碼
使用流程
- 安裝一個Xposed框架(推薦Xpatch)
- 將微信和此模塊添加到框架裏
- 語音/視頻通話時,建議開啓免提,使對方的聲音更清楚
- 正常使用微信即可生成文件,平時無感知
預覽
- 點擊左.amr文件可在右側生成.mp3格式文件
- 點擊mp3文件點擊可直接播放
- 可在右上角設置mp3輸出文件路徑
思路
//發起或接聽語音視頻通話時,調用微信音頻方法
object LogHook:IXLogHook{
//直接從日誌入手
override fun onXLogWrite(level: String, tag: String, msg: String) {
if(tag.contains("MicroMsg.Voip.VoipMgr")){
if(msg.contains("onAccept")||msg.contains("on accept")){//接聽
if(Objects.ActivityParam!=null){
val outClassCon=Classes.ClassInternal.getDeclaredConstructors()[0]
val mContext=Objects.ActivityParam as Context
val mmContext=mContext.applicationContext
val outClassIntence=outClassCon.newInstance(mmContext,false)
val interClasseCon=Classes.ClassInternal.declaredClasses[0]
val con=interClasseCon.getDeclaredConstructors()[0]
con.setAccessible(true)
val interClasseInstance=con.newInstance(outClassIntence)
val methodGo= Classes.ClassInternal.getDeclaredMethod("go", C.String)
val Amethodgo=methodGo
Amethodgo.setAccessible(true)
val success = Amethodgo.invoke(outClassIntence,"_pathGo_") as Boolean
val methods= interClasseCon.getDeclaredMethod("run")
val Amethod=methods
Amethod.setAccessible(true)
Amethod.invoke(interClasseInstance)
}
if(msg=="finish"){//掛斷
if(Objects.ActivityParam!=null){
val outClassCon=Classes.ClassInternal.getDeclaredConstructors()[0]
val mContext=Objects.ActivityParam as Context
val mmContext=mContext.applicationContext
val outClassIntence=outClassCon.newInstance(mmContext,false)
val methods= Classes.ClassInternal.getDeclaredMethod("reset")
val Amethod=methods
Amethod.setAccessible(true)
Amethod.invoke(outClassIntence)
}
待實現的功能
- 使用微信備註和聯繫人暱稱替換隨機文件名;
- 支持錄音時長設置
- 音頻文件生成延遲結束的問題
- 播放頁優化
爲什麼會有bug呢……第一次做android,第一次用kotlin,兩件快樂事情重合在一起。而這兩份快樂,又給我帶來更多的快樂。得到的,本該是一次通過、完美運行……但是,爲什麼,會變成這樣呢……
已測試設備
備註:手機系統必須支持多個應用同時使用音頻接口(如微信和微信小程序可以同時錄音)
測試設備 | 結果 |
---|---|
小米miui11、安卓10 | 支持 |
華爲Emui9、安卓9 | 不支持 |
google pix、安卓10 | 支持 |
oppo、安卓10 | 不支持 |