做一次檢查。數據安裝完成後,用戶不太可能需要再次執行此操作。一旦數據安裝完畢,用戶無法刪除它,即使他們想要。
此外,不要使用ACTION_CHECK_TTS_DATA意圖,這是尷尬的使用。
相反,做到以下幾點:
- 創建文字轉語音
- 的OnInit,檢查isLanguageAvailable() 如果是,您的應用程序是所有設置。 如果沒有,發送ACTION_INSTALL_TTS_DATA
下面是一些以我建議的方式初始化TextToSpeech的代碼。作爲獎勵,它也設置語言。
public class DemoCreateTTS
{
private static final String TAG = "DemoCreateTTS";
private TextToSpeech tts;
public void createTextToSpeech(final Context context,
final Locale locale)
{
tts = new TextToSpeech(context, new OnInitListener()
{
@Override
public void onInit(int status)
{
if (status == TextToSpeech.SUCCESS)
{
Locale defaultOrPassedIn = locale;
if (locale == null)
{
defaultOrPassedIn = Locale.getDefault();
}
// check if language is available
switch (tts.isLanguageAvailable(defaultOrPassedIn))
{
case TextToSpeech.LANG_AVAILABLE:
case TextToSpeech.LANG_COUNTRY_AVAILABLE:
case TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE:
Log.d(TAG, "SUPPORTED");
tts.setLanguage(locale);
//pass the tts back to the main
//activity for use
break;
case TextToSpeech.LANG_MISSING_DATA:
Log.d(TAG, "MISSING_DATA");
Log.d(TAG, "require data...");
Intent installIntent = new Intent();
installIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
context.startActivity(installIntent);
break;
case TextToSpeech.LANG_NOT_SUPPORTED:
Log.d(TAG, "NOT SUPPORTED");
break;
}
}
}
});
}
}
我已經做了類似於你提到的事情。謝謝! – swinefeaster 2011-11-25 08:09:46
@gregm [爲什麼](http://stackoverflow.com/q/11550746/636571)是ACTION_CHECK_TTS_DATA意圖「尷尬使用」?現在感謝+1。 – an00b 2012-07-18 21:51:23
你好,我測試使用isLanguageAvailable,但它沒有給出所需的結果。例如,韓語的語音數據沒有安裝。然而,當我沒有下載時調用韓語語音數據上的isLanguageAvailable,它只是返回LANG_COUNTRY_AVAILABLE,這也是正確的。只有語音數據尚未下載,語言環境纔可用於引擎。但是,由於這個原因,我無法檢查是否下載語音數據,因爲我從來沒有收到過LANG_MISSING_DATA。該解決方案不再適用?謝謝! – 2017-06-18 16:00:22