我创建了一个使用TTS引擎向用户发送反馈的应用程序。为了提高性能,我使用了synthesizeToFile
和addSpeech
方法,但要合成的文本字符串在strings.xml
文件中,所以我必须为每个方法调用这些方法TTS引擎说出的字符串。
由于TTS引擎仅使用名称以tts_
开头的字符串,是否可以轻松迭代tts_
文件中以strings.xml
开头的所有字符串?
答案 0 :(得分:10)
您可以通过反射获取strings.xml中的所有字符串,并仅过滤掉您需要的字符串,如下所示:
for (Field field : R.string.class.getDeclaredFields())
{
if (Modifier.isStatic(field.getModifiers()) && !Modifier.isPrivate(field.getModifiers()) && field.getType().equals(int.class))
{
try
{
if (field.getName().startsWith("tts_"))
{
int id = field.getInt(null);
// do something here...
}
} catch (IllegalArgumentException e)
{
// ignore
} catch (IllegalAccessException e)
{
// ignore
}
}
}
答案 1 :(得分:4)
您可以将所有资源名称(定义时)全部提供给"prefix"+(1..n)
。并且在代码使用中,
int resid=<constant>;
for(i=1;resid!=0;i++){
resid = this.getResources().getIdentifier("prefix"+i, "strings", this.getPackageName());
}
答案 2 :(得分:2)
您可以将这些TTS字符串放入TypedArray。
答案 3 :(得分:-1)
在我的所有项目中,我只是观察到R.java中字符串的值以0x7f050000
开头并向上计数,如0x7f050001, 0x7f050002, 0x7f050003,
....
你可以++
他们:D
希望有所帮助:)