有幾種方法可以做到這一點。爲了獲取默認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
}
}
我沒有測試以上,但我敢肯定,你可以建立它來得到它做你想要的。
你有問題的任何解決方案,因爲我有同樣的問題。 –