在Android Studio中为媒体播放器使用多个音频源

在Android Studio中为媒体播放器使用多个音频源,android,Android,我想创建一个具有多个声音的媒体播放器,并在单击按钮时随机播放一个声音。 我尝试使用MediaPlayer.create()函数,但只能设置一个音频源。 我还尝试使用setDataSource()函数,但这似乎只适用于存储在应用程序外部的资源(据我所知) 这段代码在运行时不会给出任何错误,但在单击时不会播放任何内容 编辑:在第一次单击时有效但在后续单击时无效的更新代码: meow.setOnClickListener((view) ->{ Random random

我想创建一个具有多个声音的媒体播放器,并在单击按钮时随机播放一个声音。 我尝试使用MediaPlayer.create()函数,但只能设置一个音频源。 我还尝试使用setDataSource()函数,但这似乎只适用于存储在应用程序外部的资源(据我所知)

这段代码在运行时不会给出任何错误,但在单击时不会播放任何内容

编辑:在第一次单击时有效但在后续单击时无效的更新代码:

meow.setOnClickListener((view) ->{
            Random random = new Random();
            int r = random.nextInt(6-1) + 1;
            Toast.makeText(MainActivity.this,Integer.valueOf(r).toString(),Toast.LENGTH_SHORT).show();
            try{
                if(r==1)
                    fileDescriptor = MainActivity.this.getResources().openRawResourceFd(R.raw.meowcat1);
                else if (r==2)
                    fileDescriptor = MainActivity.this.getResources().openRawResourceFd(R.raw.meowcat2);
                else if (r==3)
                    fileDescriptor = MainActivity.this.getResources().openRawResourceFd(R.raw.meowcat3);
                else if (r==4)
                    fileDescriptor = MainActivity.this.getResources().openRawResourceFd(R.raw.meowcat4);
                else
                    fileDescriptor = MainActivity.this.getResources().openRawResourceFd(R.raw.meowcat5);
                mp.setDataSource(fileDescriptor.getFileDescriptor(), fileDescriptor.getStartOffset(), fileDescriptor.getLength());
                mp.prepare();
                mp.start();
            }catch(Exception e){e.printStackTrace();}
        });

R-是具有常量的类。“r.Wr.MeoCAT1”是一个简单的字符串,它不考虑链接到文件的常量。 首先,您需要创建原始常量的int数组,而不是简单字符串的字符串数组。 第二,若要从原始文件播放文件,则需要为该原始文件创建AssetFileDescriptor并在setDataSource方法中使用。例如:

    AssetFileDescriptor fileDescriptor = getContext().getResources().openRawResourceFd(R.raw.meowcat1);
    mediaPlayer.setDataSource(fileDescriptor.getFileDescriptor(), fileDescriptor.getStartOffset(), fileDescriptor.getLength());

别忘了,请用onDestroy方法发布编解码器。

完成!对不起,我是新来的。我用这段代码得到了它,但是它只在第一次点击按钮时起作用,在下一次点击时似乎不会重新分配。有什么建议吗?编辑:用代码更新了原始问题,因为我无法将其放在这里
    AssetFileDescriptor fileDescriptor = getContext().getResources().openRawResourceFd(R.raw.meowcat1);
    mediaPlayer.setDataSource(fileDescriptor.getFileDescriptor(), fileDescriptor.getStartOffset(), fileDescriptor.getLength());