I am trying to implement an app that reads text in different languages. Surprisingly, when I use the method isLanguageAvailable(Locale loc), it returns true for languages in the Google TTS list that are not downloaded yet. They are even played when I call speak() method. I have concluded that this happens because they are on-line voices.
The documentation shows that you can know whether a voice is on-line or not using method getFeatures() over the Voice object. However, Voice class is implemented for API >= 21. For API < 21, there is a getFeatures(Locale loc) method as well over the TextToSpeech class, which is supposed to return a string array with different feature descriptions. I have tried this last method over different engines and locales, and I generally get an empty array. Probably, this is an extra information that TTS developers can fill in or not...
So, how can I know if a tts-locale is an on-line one for API < 21?