2

デバイスで TTS エンジンの可用性を確認するためのコードがあります。ステートメント tts.getEngines().size() < 1 は API 14 からのみ実行されるため、API 8 からでも同じ機能をチェックする方法 (メソッド) があるかどうかを知る必要があります。

前もって感謝します

コード:

private void checkTTSAvailability() {
    tts = new TextToSpeech(this, this);
    ttsPresent=true;
    **if (tts.getEngines().size() < 1) {** 
        PackageManager pm = getPackageManager();
        Intent installIntent = new Intent();
        installIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
        ResolveInfo resolveInfo = pm.resolveActivity(installIntent, PackageManager.MATCH_DEFAULT_ONLY); 
        if (resolveInfo == null) {
            Log.i("DragDrop", "No voice support on your phone"); 
            Dialog d = new Dialog(this);
            d.setTitle("Alert  ");
            TextView tv = new TextView(this);
            tv.setText("No voice support on your phone");
            d.setContentView(tv);
            d.show();
            ttsPresent=false;  
            // Not able to find the activity which should be started for
            // this intent
        } else {
            Dialog d = new Dialog(this);
            d.setTitle("Alert  ");
            TextView tv = new TextView(this);
            tv.setText("Installing");
            d.setContentView(tv);
            d.show();
            Log.i("DragDrop", "Installing");
            startActivity(installIntent);
        }
    }
}
4

1 に答える 1

0

私の知る限り、TTS エンジンをリストする方法や、API 14 より下にインストールされていることを知る方法はありません。インストールされているすべてのパッケージのリストを確認して、そこにある既知の TTS エンジン名を認識できるかもしれませんが、理想とはほど遠いものです。

これを行う正しい方法は、アクティビティに TextToSpeech.OnInitListener() コールバックを実装し、デフォルトのシステム TTS エンジンがいつ初期化されたか、初期化が成功したか失敗したかを知ることです。次に、SUCCESS が返されたときのこのコールバック内から、最初に TTS オブジェクトに必要な言語を設定し、その言語のインストール済みデータ (ACTION_CHECK_TTS_DATA) を確認するためにインテントを TTS に送信します。必要です。

コード例については、私の他の投稿、以下のリンクを参照してください。Android Java と Android 用 C# (Android 用 Xamarin を使用) の非同期操作を比較しますが、そこにある Java コード サンプルには、正しく機能する OnInitListener() コールバックがあります。

Xamarin または Dot42 で async/await を使用して C# で Android コールバックを実装する方法は?

グレッグ

于 2013-05-29T12:14:32.680 に答える