我想从数组中选择随机声音
<array name="cat_sounds">
<item>@raw/cat_1</item>
<item>@raw/cat_2</item>
<item>@raw/cat_3</item>
</array>
并点击按钮播放该声音。
//Cat button sounds
TypedArray cat_sounds = getResources().obtainTypedArray(R.array.cat_sounds);
int choice = (int) (Math.random() * cat_sounds.length());
Button cat = (Button) this.findViewById(R.id.catSounds);
final MediaPlayer mp = MediaPlayer.create(this,cat_sounds[choice]);
cat.setOnClickListener(new OnClickListener() {
public void onClick(View v){
mp.start();
}
});
但由于某种原因,我的代码使我的应用程序崩溃。怎么了?
答案 0 :(得分:0)
我设法让它发挥作用
//Cat button
Button cat = (Button) this.findViewById(R.id.catSounds);
cat.setOnClickListener(new OnClickListener() {
public void onClick(View v){
//Select random sound
String[] cat_sounds = getResources().getStringArray(R.array.cat_sounds);
String randomString = cat_sounds[new Random().nextInt(cat_sounds.length)];
int resID = getResources().getIdentifier(randomString, "raw", getPackageName());
final MediaPlayer mp = MediaPlayer.create(getApplicationContext(), resID);
mp.start();
}
});
但是每次点击后创建一个新的媒体播放器会导致声音在20-30次点击后停止工作..有什么建议吗?
答案 1 :(得分:0)
这很有可能不再对您有帮助,但也许会对其他人有所帮助。
除了您自己的答案外,您还需要在使用MediaPlayer
后释放它。在您的代码中,您创建了过多的播放器实例,因此一段时间后它将停止工作。
您可以使用
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
mp.release();
}
});
mp.start()
之后的