我对Android的tts服务的实现有疑问。 这是交易:
- 我查看了Flite代码,我发现需要这项服务来进行这三项活动:
<activity
android:name=".DownloadVoiceData"
android:label="@string/flite_voice_manager"
android:theme="@android:style/Theme.Holo"
android:configChanges="orientation">
<intent-filter>
<action android:name="android.speech.tts.engine.INSTALL_TTS_DATA" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name=".CheckVoiceData"
android:label="@string/app_name"
android:theme="@android:style/Theme.Translucent.NoTitleBar" >
<intent-filter>
<action android:name="android.speech.tts.engine.CHECK_TTS_DATA" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name=".GetSampleText"
android:label="@string/app_name"
android:theme="@android:style/Theme.Translucent.NoTitleBar" >
<intent-filter>
<action android:name="android.speech.tts.engine.GET_SAMPLE_TEXT" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
这些活动的实际行动可以自我解释,但我想知道: 它们是强制性的,它们是如何工作的......我已经谷歌了,但没有运气。
有人可以指出解释这些活动的文件吗?
此外,是否有详细说明tts服务流程的文档?
提前完成。
答案 0 :(得分:0)
CheckVoiceData
是必要的,因为它可能由愿意知道引擎是否有效的客户调用。
我认为你可以在没有其他两个的情况下生活至少一段时间。
<activity android:name=".CheckVoiceData"
android:theme="@android:style/Theme.NoDisplay">
<intent-filter>
<action android:name="android.speech.tts.engine.CHECK_TTS_DATA" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
在CheckVoiceData.onCreate()
中你会做这样的事情:
ArrayList<String> askedToCheck = intent.getStringArrayListExtra(TextToSpeech.Engine.EXTRA_CHECK_VOICE_DATA_FOR);
// if it is null, they usually check and report all available languages.
ArrayList<String> available = new ArrayList<String>();
ArrayList<String> unavailable = new ArrayList<String>();
//...
Intent returnData = new Intent();
returnData.putStringArrayListExtra(
TextToSpeech.Engine.EXTRA_AVAILABLE_VOICES, available);
returnData.putStringArrayListExtra(
TextToSpeech.Engine.EXTRA_UNAVAILABLE_VOICES, unavailable);
setResult(result, returnData);
finish();
有效语言字符串的示例是"eng-USA"
。