Android 尽管设备上安装了有效的TTS引擎,但TTS引擎安装检查未返回成功代码
我正在使用以下代码检测我的设备上是否安装了TTS引擎 要启动TTS引擎列表页面,请执行以下操作:Android 尽管设备上安装了有效的TTS引擎,但TTS引擎安装检查未返回成功代码,android,text-to-speech,google-text-to-speech,Android,Text To Speech,Google Text To Speech,我正在使用以下代码检测我的设备上是否安装了TTS引擎 要启动TTS引擎列表页面,请执行以下操作: //Open Android Text-To-Speech Settings startActivityForResult(Build.VERSION.SDK_INT >= 14 ? new Intent().setAction("com.android.settings.TTS_SETTINGS").setFla
//Open Android Text-To-Speech Settings
startActivityForResult(Build.VERSION.SDK_INT >= 14 ?
new Intent().setAction("com.android.settings.TTS_SETTINGS").setFlags(Intent.FLAG_ACTIVITY_NEW_TASK) :
new Intent().addCategory(Intent.CATEGORY_LAUNCHER).setComponent(new ComponentName("com.android.settings", "com.android.settings.TextToSpeechSettings")).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
,ConstantParams.VOICE_TTS_CHECK_CODE);
返回到我的应用程序的活动时:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == ConstantParams.VOICE_TTS_CHECK_CODE)
{
Log.d("TTS","Result code : "+resultCode);
if(resultCode != TextToSpeech.Engine.CHECK_VOICE_DATA_PASS){
Log.d("TTSService","Valid TTS not installed");
Intent install = new Intent();
install.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
startActivity(install);
}
else
{
//Do something
}
}
}
但是,尽管我的设备安装了多个TTS引擎(我可以手动转到该设置页面,更改TTS引擎并验证语音中的更改),但此代码始终返回值为0的resultCode(检查语音数据失败)
请告诉我如何通过这张支票。从TTS设置页面返回到我的应用程序活动时,如何获取事件?(当前,如果我取消结果代码检查,我可以从我的应用程序转到TTS设置页面,但我无法检测返回到我的应用程序活动的返回阶段)这不是正确的意图-请参见此处,它不会重定向到您使用的TTS屏幕,我修改了我的设置,删除了setflag调用,并且我能够重定向到TTS屏幕。但是,当我从该屏幕返回时,我仍然会收到CHECK_VOICE_DATA_FAIL result代码。如果您运行链接的测试代码,并且列表为空,您将知道没有安装引擎,然后您可以将用户重定向到Play Store。若要检查是否有其他错误,请使用此意图您正在使用的一个不提供回调。您现在提供的第二个链接允许我仅在第一次尝试访问可用的TTS引擎时,在可用的TTS引擎之间进行选择。第二次(或任何进一步的尝试),它直接检测CHECK_VOICE_DATA_PASS事件,不允许我选择。是否有一些“标志”,我可以重置,以便选择可用的TTS引擎之间的选项出现在每次我试图访问它?另外,在第二个链接的代码中,您使用了“protected”而不是“public”,所以我的IDE在抱怨。是故意使用“受保护”而不是“公共”吗?您是否意外选择了“始终选择此选项”-如果是,您可以从所选应用程序的设置“清除默认值”中清除它。受保护vs私有vs公共取决于您打算在其中使用它的范围