在我的应用程序(Android API 10)中,我使用标准方法检查TTS引擎和语音是否可用:
Intent checkIntent = new Intent();
checkIntent.setAction( TextToSpeech.Engine.ACTION_CHECK_TTS_DATA );
startActivityForResult( checkIntent, CHECK_TTS_DATA );在具有多个TTS引擎的设备中,Android要求选择一个("complete action using...")
有没有办法使用默认的TTS引擎来检查ACTION_CHECK_TTS_DATA (避免出现引擎选择对话框)?或者..。如何让用户选择TTS引擎(与setEngineByPackageName() (API10)一起使用)?
发布于 2013-10-16 21:01:29
有几种方法可以做到这一点。要获取默认的TTS引擎,请签入onInit侦听器:
TextToSpeech tts = new TextToSpeech(context, onInitListener);
@Override
public void onInit(final int status) {
switch (status) {
case TextToSpeech.SUCCESS:
try {
final String initEngine = tts.getDefaultEngine();
// Check it's != null before doing anything with it.
} catch (final Exception e) {
}
break;
}
}try/catch块在那里,因为我在一些IVONA和SVOX TTS引擎上遇到过崩溃。
一旦您有了包名,您就可以查询意图活动,如果需要,可以使用自定义选择器或将意图限制为您从上面获得的包名。
private void getEngines(String initEngine) {
Intent ttsIntent = new Intent();
ttsIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
PackageManager pm = getPackageManager();
List<ResolveInfo> list = pm.queryIntentActivities(ttsIntent,
PackageManager.GET_META_DATA);
for (ResolveInfo appInfo : list) {
// Might want a null check in here
if(appInfo.activityInfo.applicationInfo.packageName.matches(initEngine) {
ttsIntent
.setPackage(appInfo.activityInfo.applicationInfo.packageName);
}
startActivityForResult(ttsIntent, 33);
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 33 && data != null) {
// do something
}
}我还没有测试过上面的东西,但我相信你可以在它的基础上进行构建,让它做你想做的事情。
https://stackoverflow.com/questions/17906930
复制相似问题