粵語語音引擎apk及粵語資源包
android 6.0 平台老人機需求設備默認支持粵語離線播報,在網上找了許多資料和apk都沒有解決。
發現訊飛的TTS3.0聯網下載粵語包后可以完美支持。然后嘗試反編譯修改默認語音最后預置apk及資源包,最終解決了這個問題。
1. 預置apk
首先預置apk,預置apk的方法不再贅述。參考:預置apk
2. 預置粵語資源
資源包預置在 storage/sdcard0/Speechcloud 目錄下,注意編譯時無法將文件預置進設備 sdcard,需要先將文件預置到如apk預置目錄或/system/sdcard/或其他rom中已存在的目錄下,然后寫Service監聽開機廣播,判斷首次開機時將/system/sdcard/目錄下預置的資源文件copy到到 storage/sdcard0/Speechcloud 。可以參考另一篇文章:Android MTK預置音樂/圖片/文件
3. 編寫demo測試
關鍵方法:
+import android.speech.tts.TextToSpeech; +import java.util.Locale; + private TextToSpeech mTextToSpeech; + private void sendCustomBroadcast(String paramString){ + if(mTextToSpeech == null) { + mTextToSpeech=new TextToSpeech(mContext, new TextToSpeech.OnInitListener() { + @Override + public void onInit(int status) { + if (status==TextToSpeech.SUCCESS) { + int supported=mTextToSpeech.setLanguage(Locale.US);//此處不影響語言 + if ((supported!=TextToSpeech.LANG_AVAILABLE)&&(supported!=TextToSpeech.LANG_COUNTRY_AVAILABLE)) { + Log.i("mh","TextToSpeech error"); + } + } + } + }); + } + mTextToSpeech.speak(paramString, TextToSpeech.QUEUE_FLUSH, null); + }
4. 將默認語音引擎設置為訊飛
Android 6.0 修改方法:frameworks/base/core/java/android/speech/tts/TtsEngines.java
public String getDefaultEngine() { String engine = getString(mContext.getContentResolver(), Settings.Secure.TTS_DEFAULT_SYNTH); + if(engine==null) { + engine ="com.iflytek.speechcloud"; + } return isEngineInstalled(engine) ? engine : getHighestRankedEngineName(); }
以上可以自行定制如撥號盤按鍵播報,來電報號,電話簿報號等。