Amadeus復(fù)刻計劃(App篇 五)
前言:本篇算是完成了階段性的成果,即完美復(fù)現(xiàn)原項目的各項功能,代碼已開源,倉庫地址見文章底部
總結(jié)下主要的技術(shù)難點及解決方法:
Q1:前文提到,項目測試時使用getgetPackageManager() 無法獲取本機安裝的全部應(yīng)用,而這也影響到了之后的語音識別服務(wù)(因為無法獲取語音識別引擎存在與否)。
A1:經(jīng)查閱資料得知,安卓11及更高版本將用戶安裝的應(yīng)用視為隱私保護的一部分,因此如果要獲取,需要在Manifest中申請QUERY_ALL_PACKAGES權(quán)限,或使用<queries>標(biāo)簽獲取部分指定應(yīng)用的信息。詳情見官方開發(fā)文檔(https://developer.android.com/about/versions/11/privacy/package-visibility)
Q2?:?原項目使用的語音識別模塊來自谷歌,該模塊在原生安卓系統(tǒng)中是內(nèi)置的。而國內(nèi)手機系統(tǒng)被廠商各種魔改,該語音模塊已經(jīng)不復(fù)存在了(至少在小米、華為手機是如此),因此直接使用SpeechRecognizer類是無法成功調(diào)用的。筆者需要找尋新的方法。
A2:?尚無良好的解決方法,筆者目前使用小米的語音識別模塊代替了谷歌的,免除了需要原應(yīng)用需要翻墻的弊端,但缺點是只能識別中文與英語。另外在非小米手機上,筆者的解決方法是讓用戶自主設(shè)置所使用的語音引擎(不過目前也就三個),以訊飛引擎為例,用戶下載“訊飛語記”軟件后并在設(shè)置中選擇訊飛即可正常使用,同理也可下載谷歌的,不過需要魔法。
Q3:讀代碼好累啊
A3:擺一天,明日再戰(zhàn)~
參考資料:
https://developer.android.com/about/versions/11/privacy/package-visibility
https://www.jianshu.com/p/a46c0bd8f961
github倉庫地址:
https://github.com/jimieguang/Amadeus