我有这个非常基本的应用程序,它有1个按钮和X个语音文件。语音文件位于raw /.
下的res /文件夹中点击按钮后,我希望该应用播放随机语音文件。这是我到目前为止所做的:
Button playNasr = (Button) findViewById(R.id.button1);
playNasr.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
rand = randomGenerator.nextInt(6) + 1;
// here's where I'm at a loss, I want to be able to concatenate
// the random number to the "voice00" string to form
// "voice001/2/3/etc..." in correspondence to how my voice files
// are named.
mp = MediaPlayer.create(Main.this, R.raw.voice00) + rand;
mp.start();
}
});
感谢任何帮助,提前谢谢
答案 0 :(得分:2)
你应该尝试这样的事情:
String voiceStr = "voice00";
MediaPlayer mp = new MediaPlayer();
Resources res = getResources();
String pkgName = getPackageName();
playNasr.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
rand = randomGenerator.nextInt(6) + 1;
// "voice00x"
String id = voiceStr + rand;
// Get raw resource ID
int identifier = res.getIdentifier(id, "raw", pkgName);
AssetFileDescriptor afd = res.openRawResourceFd(identifier);
// Reuse MediaPlayer or else you will exhaust resources
mp.reset();
mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength();
mp.prepare();
mp.start();
}
}
通过这种方式,您可以重复使用MediaPlayer
实例(如果您还没有遇到错误,请尝试重复按下按钮 - 最终会出错)并且可以动态设置数据源。您可能希望对此进行优化以将整数格式化为“001”,“001”等,并且能够处理“010”,但我只是为了示例而硬编码。