Check once. Once the data is installed, it is very unlikely that the user will ever need to do this again. Once the data is installed, the user will not be able to delete it, even if they want to.
Also, do not use ACTION_CHECK_TTS_DATA Intent, which is inconvenient to use.
Instead, follow these steps:
- Create TextToSpeech
- OnInit, check isLanguageAvailable () if so, your application is configured. if not, send ACTION_INSTALL_TTS_DATA
Here is the code that initializes TextToSpeech as I suggest. As a bonus, it also sets the language.
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; } } } }); } }
gregm
source share