从数组中选择随机声音,以便在Android Studio上单击按钮进行播放

时间:2017-03-20 19:50:57

标签: android-studio audio random

我想从数组中选择随机声音

<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();
    }
});

但由于某种原因,我的代码使我的应用程序崩溃。怎么了?

2 个答案:

答案 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()之后的