与API 8中的tts.getEngines()。size()类似的方法

时间:2013-05-25 11:11:29

标签: android android-2.2-froyo

我有一个代码来检查设备中的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);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

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

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

有关代码示例,请参阅我的其他帖子,链接如下。它比较了Android Java中的异步操作和Android上的C#(使用Xamarin for Android),但是那里给出的Java代码示例具有正确运行的OnInitListener()回调。

How to implement Android callbacks in C# using async/await with Xamarin or Dot42?

格雷格