To nie jest odpowiedź masz nadzieję, jak w chwili pisania tego tekstu, nie wierzę, że to proste rozwiązanie do tego. Mam wielką nadzieję, że udowodnię, że się mylę.
Poprosiłem akcesorium do dostarczania tych informacji programowo dawno temu - here
Wzmocnienie sugerowaną dodatkowy parametr RecognizerIntent.EXTRA_SUPPORTED_OFFLINE_LANGUAGES
:
Byłoby z pewnością trywialne do tego należy dodać i stosować w następujących przypadkach sposób:
final Intent vrIntent = new Intent(RecognizerIntent.ACTION_GET_LANGUAGE_DETAILS);
getContext().sendOrderedBroadcast(vrIntent, null, new BroadcastReceiver() {
@Override
public void onReceive(final Context context, final Intent intent) {
final ArrayList<String> vrStringLocales = intent.getExtras().getStringArrayList(
RecognizerIntent.EXTRA_SUPPORTED_LANGUAGES);
// This would be nice
final ArrayList<String> vrStringOfflineLocales = intent.getExtras().getStringArrayList(
RecognizerIntent.EXTRA_SUPPORTED_OFFLINE_LANGUAGES);
}
}, null, 1234, null, null);
Niestety, to się nigdy nie wydarzyło.
Masz dwie inne opcje, aby spróbować z wdziękiem sobie z tym poradzić.
W mało prawdopodobnym przypadku, gdy aplikacja uruchamia się z uprawnieniami root'a, można sprawdzić lokalizację pliku /data/data/com.google.android.googlequicksearchbox/app_g3_models/
, która zawiera pliki trybu offline, oznaczoną dość wygodnie przez ich ustawienia narodowe.
Druga polega na poznaniu, kiedy użytkownik potrzebuje zachęty do zainstalowania brakujących plików trybu offline.
Z mojego doświadczenia wynika, że błąd rozpoznawania SpeechRecognizer.ERROR_SERVER
najczęściej oznacza to, ale nie jest to niezawodne.
@Override
public void onError(final int error) {
switch (error) {
case SpeechRecognizer.ERROR_SERVER:
// TODO - prompt to install offline files
break;
}
}
Po wykryciu można poprowadzić użytkownika do prawidłowego ekranu instalacji.
public static final String PACKAGE_NAME_GOOGLE_NOW = "com.google.android.googlequicksearchbox";
public static final String ACTIVITY_INSTALL_OFFLINE_FILES = "com.google.android.voicesearch.greco3.languagepack.InstallActivity";
public static boolean showInstallOfflineVoiceFiles(@NonNull final Context ctx) {
final Intent intent = new Intent();
intent.setComponent(new ComponentName(PACKAGE_NAME_GOOGLE_NOW, ACTIVITY_INSTALL_OFFLINE_FILES));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
try {
ctx.startActivity(intent);
return true;
} catch (final ActivityNotFoundException e) {
} catch (final Exception e) {
}
return false;
}
Stosowanie tak zakodowanych wartości, jak ta, nie jest oczywiście idealne, ale nie jest to również sytuacja!
Po rozwiązaniu wszystkich powyższych problemów i pomyśl, że masz dobre rozwiązanie tymczasowe - pomyśl jeszcze raz! Niezależnie od tego, czy użytkownik poprawnie zainstalował brakujące pliki trybu offline, jest wysoce prawdopodobne, że nadal nie zadziała ...
Mój numer answer here opisuje proces, w którym muszę jeszcze poprowadzić użytkownika. To bardzo frustrujące.
W końcu jeszcze jeden błąd, który należy wrzucić do miksu - RecognitionListener.onError(int) może zostać zgłoszony, gdy nie wystąpi błąd. Sprawdź mój numer from the answer here, aby użyć numeru BugRecognitionListener
, aby sprawdzić, czy wywołania zwrotne są wysyłane we właściwej kolejności i zignorować te, które nie są. To pozostaje problemem, mimo że moja odpowiedź sugeruje poprawkę w poprzedniej wersji.
Powyższe powinno Cię zająć! Powodzenia ...
Nie, to pytanie brzmi "jak używać mowy w trybie offline", praca w trybie offline działa, ale musisz pobrać plik językowy, to pytanie brzmi "jak wykryć i pobrać/zainstalować plik językowy" – James
Poprosiłem o rozszerzenie to dawno temu, które jest teraz oznaczone jako przestarzałe. https://code.google.com/p/android/issues/detail?id=59145 – brandall
wypróbuj ten kod z @gregm [tutaj] (http://stackoverflow.com/a/10548680/4394827) –