書いている時点で、私はこれまでまっすぐ進む解決策があると信じていませんので、これは、あなたが望んでいる答えではありません。私は間違っていることが証明されたいと思っています。
私は長い時間前に、プログラムでこの情報を提供するために強化を要求した - here
強化が追加パラメータRecognizerIntent.EXTRA_SUPPORTED_OFFLINE_LANGUAGES
提案:
を、これは、以下に追加して使用されることが確実に些細なことだろうway:
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);
ああ、それは起こったことはありません。
これを正常に処理するための2つのオプションがあります。
アプリケーションがルート権限で実行されている場合は、オフラインファイルを含む/data/data/com.google.android.googlequicksearchbox/app_g3_models/
の場所を確認することができます。このファイルは、ロケールによって簡単にラベル付けされています。
ユーザーは、不足しているオフラインファイルをインストールするためのプロンプトがいつ必要かを知る必要があります。
私の経験から、SpeechRecognizer.ERROR_SERVER
の認識エラーはこれを示すことがよくありますが、それは間違いありません。
@Override
public void onError(final int error) {
switch (error) {
case SpeechRecognizer.ERROR_SERVER:
// TODO - prompt to install offline files
break;
}
}
これが検出されると、ユーザーは正しいインストール画面に誘導できます。
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;
}
このようなハードコードされた値を使用すると、もちろん理想的ではありませんが、この状況もありません。
上記のすべてを使いこなし、暫定的な解決策があると思ったら、もう一度考えてください。ユーザーがオフラインファイルが正しくインストールされているかどうかにかかわらず、まだ動作しない可能性が高いです.....
私のanswer hereは私のユーザーをガイドするプロセスを説明しています。非常にイライラしています。
最後に、エラーがなければもう1つのバグ(RecognitionListener.onError(int))がスローされます。私の要点from the answer hereでBugRecognitionListener
を使用するようにチェックすると、コールバックが正しい順序で送信されていることを確認し、そうでないものを無視できます。これは私の答えが以前のリリースでの修正を提案しているにもかかわらず、問題が残っています。
上記はあなたを忙しくするはずです。幸運....
いいえ、その質問は「オフラインスピーチの使い方」ですが、オフラインスピーチは機能しますが、言語ファイルをダウンロードする必要があります。この質問は「言語ファイルの検出とダウンロード/インストール方法」 – James
これはずっと前のことであり、今は時代遅れとマークされています。 https://code.google.com/p/android/issues/detail?id=59145 – brandall
このコードを@gregm [ここ](http://stackoverflow.com/a/10548680/4394827) –