2017-06-18 39 views
8

Używam klasy TextToSpeech dla systemu Android. Wszystko działa normalnie. Istnieją jednak języki/ustawienia regionalne, które nie są domyślnie instalowane, ale obsługiwane przez aparat TTS i nie można przechwycić stanu brakujących danych głosowych.Sprawdzanie systemu Android pod kątem obsługiwanych ustawień narodowych z brakującymi/nie pobranymi danymi głosowymi

Po włączeniu internetu, gdy próbuję ustawić język na nowe ustawienia regionalne, których dane głosowe nie zostały pobrane, wystarczy pobrać dane głosowe i normalnie/pomyślnie wykonać metodę wypowiadania.

Jednak przy wyłączonym internetie, gdy próbuję ustawić język dla nowego locale, którego dane głosowe nie zostały pobrane, próbuje pobrać dane głosowe. Ale bez internetu wskazuje tylko "pobieranie" na ekranie ustawień "Dane głosowe TTS" w "Język i dane wejściowe" dla wybranych ustawień narodowych, bez żadnego postępu. Zgodnie z oczekiwaniami metoda głosowa nie działa, ponieważ dane głosowe nie są pobierane. Gdy tak się stanie, myślę, że metody TTS setLanguage/isLanguageAvailable zwrócą mi LANG_MISSING_DATA w celu przechwytywania tego stanu, jednak po prostu zwraca LANG_COUNTRY_AVAILABLE. Sytuacja jest pokazana na tym obrazku: enter image description here

Chcę być w stanie wykryć, kiedy dane głosowe wybranych lokalizacji nie są pobierane/brakujące i albo przekazać wiadomość toastową, albo bezpośrednio użytkownikowi, aby ją pobrać. Widziałem kilka postów sugerujących korzystanie z isLanguageAvailable takich jak ten one. Spojrzałem również na android documentation i wygląda na to, że wartości zwracane przez językLanguageAvailable powinny przechwytywać stan brakujących danych głosowych za pomocą LANG_MISSING_DATA.

Próbowałem również wysłać intencję z ACTION_CHECK_TTS_DATA jako inny sposób sprawdzenia brakujących danych zgodnie z sugestią w dokumentacji Androida, którą połączyłem. Jednak resultCode ponownie nie przechwycił/nie wskazał, że brakuje danych głosowych (CHECK_VOICE_DATA_FAIL), ale zwrócił CHECK_VOICE_DATA_PASS zamiast tego.

W takim przypadku, w jaki sposób mogę przechwycić stan języka/ustawień regionalnych, które są dostępne/obsługiwane, z brakującymi danymi głosowymi? Jestem również ciekawy, dlaczego CHECK_VOICE_DATA_PASS i LANG_MISSING_DATA nie są wartościami zwracanymi. Kiedy brakuje danych głosowych, czy nie powinno ono zwracać tych wartości? Dzięki! Poniżej znajduje się wartość zwracana, gdy próbuję użyć setLanguage i isLanguageAvailable w lokalizacjach, w których nie zostały pobrane dane głosowe (0 i 1 są zwróconą wartością metody pokazanej w dziennikach, -1 odpowiada brakowi odpowiadającemu dane głosowe): enter image description here

Odpowiedz

5

Możesz znaleźć wszystkie dostępne ustawienia regionalne urządzenia, korzystając z poniższej funkcji. mam nadzieję, że ten kod ci pomoże.

Locale loc = new Locale("en"); 
Locale[] availableLocales= loc.getAvailableLocales(); 
Boolean available=Boolean.FALSE; 
for (int i=0;i<availableLocales.length;i++) 
{ 
    if(availableLocales[i].getDisplayLanguage().equals("your_locale_language")) 
    { 
     available=Boolean.TRUE; 
     // TODO: 
    } 
} 
+0

Dziękujemy za wiadomość! Jednak tego nie szukałem. Można nawet użyć instancji TTS, aby efektywniej uzyskać dostęp do obsługiwanych i dostępnych języków obsługiwanych przez silnik. W każdym razie, dzięki za twój wkład! –

0

Wygląda na długie pytanie, ale i tak. Wygląda na to, że musisz sprawdzić funkcje głosowe, aby je znaleźć:

Set<String> features = voice.getFeatures(); 
if (features.contains(TextToSpeech.Engine.KEY_FEATURE_NOT_INSTALLED)) { 
//Voice data needs to be downloaded 
... 
}