2

I have a code to check the TTS engine availability in the device. As the statement tts.getEngines().size() < 1 will be executed only from the API 14. I need to know if there is any way(methods) to check the same functionality even from the API 8.

Thanks in Advance

Code:

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

AFAIK,没有办法列出 TTS 引擎或以其他方式知道它们已安装,低于 API 14。也许您可以查看所有已安装包的列表并在那里识别已知的 TTS 引擎名称,但这远非理想。

这样做的正确方法是在您的活动中实现 TextToSpeech.OnInitListener() 回调,以了解默认系统 TTS 引擎何时初始化,以及初始化是成功还是失败。然后,在 SUCCESS 返回的回调中,首先在 TTS 对象上设置您需要的语言,然后向 TTS 发送一个 Intent 以检查该语言的已安装数据 (ACTION_CHECK_TTS_DATA),当活动结果出现时,再次调用 ACTION_INSTALL_TTS_DATA 如果需要。

有关代码示例,请参阅我的另一篇文章,链接如下。它比较了 Android Java 和 C# for Android(与 Xamarin for Android)中的异步操作,但那里给出的 Java 代码示例具有正确运行的 OnInitListener() 回调。

如何使用带有 Xamarin 或 Dot42 的 async/await 在 C# 中实现 Android 回调?

格雷格

于 2013-05-29T12:14:32.680 回答