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