Android 防止MediaPlayer自动播放文件夹中的所有mp3文件

Android 防止MediaPlayer自动播放文件夹中的所有mp3文件,android,android-mediaplayer,Android,Android Mediaplayer,我来自台湾,我的英语很基础,谢谢你的原谅 我制作了一个iPad应用程序,并发布到app Store,这是一种交流板(AAC,用于说话有困难的人)。它在主视图上有几个按钮,当用户触摸其中一个按钮时,应用程序将播放与该按钮对应的mp3声音。我已将所有mp3文件放在一个文件夹中,并决定在运行时动态播放哪个文件 最近我正在开发这个应用程序的Android版本,但我遇到了一个问题,当我点击视图上的一个按钮时,MediaPlayer不仅会播放相应的一个,还会持续播放文件夹中所有剩余的mp3文件。iPad版本

我来自台湾,我的英语很基础,谢谢你的原谅

我制作了一个iPad应用程序,并发布到app Store,这是一种交流板(AAC,用于说话有困难的人)。它在主视图上有几个按钮,当用户触摸其中一个按钮时,应用程序将播放与该按钮对应的mp3声音。我已将所有mp3文件放在一个文件夹中,并决定在运行时动态播放哪个文件

最近我正在开发这个应用程序的Android版本,但我遇到了一个问题,当我点击视图上的一个按钮时,MediaPlayer不仅会播放相应的一个,还会持续播放文件夹中所有剩余的mp3文件。iPad版本的开发过程中不会出现这种情况。有人能帮我解决这个问题,让MediaPlayer正常工作吗

另外,我将所有MP3文件放在一些子文件夹中,并将它们放在“资产”文件夹中。这是因为由于某些原因,所有mp3文件都使用数字文件名(例如0123223.mp3),并且播放哪个mp3取决于用户点击的按钮,所以我不能使用R.raw.0123223,这不仅是因为R类不能有以数字命名的成员,而且目标mp3文件只能在运行时而不是编译时确定,所以我不能使用res/raw文件夹

我的代码如下:

private void PlayMP3(String mp3File) throws IOException {
    AssetFileDescriptor afd = this.getAssets().openFd(mp3File);
    MediaPlayer player = new MediaPlayer();
    player.setOnCompletionListener(new OnCompletionListener(){
        public void onCompletion(MediaPlayer mp) {
        System.out.println(mp.getAudioSessionId() + " finished.");
        }           
    });
    player.setDataSource(afd.getFileDescriptor());
    player.setLooping(false);
    player.prepare();
    player.start();
}
PlayMP3的参数“mp3file”是一个mp3文件路径的串联字符串,根据用户触摸的按钮


非常感谢

您没有发布一些代码

第一步是将声音文件插入原始文件夹

然后,您只需要几行代码:

MediaPlayer mediaPlayer = null;
mediaPlayer = MediaPlayer.create(getBaseContext(), R.raw.mysoundfile);
mediaPlayer.start();     
关闭应用程序时,不要忘记“释放”媒体播放器:

mediaPlayer.release();
mediaPlayer = null;

你没有发布一些代码

第一步是将声音文件插入原始文件夹

然后,您只需要几行代码:

MediaPlayer mediaPlayer = null;
mediaPlayer = MediaPlayer.create(getBaseContext(), R.raw.mysoundfile);
mediaPlayer.start();     
关闭应用程序时,不要忘记“释放”媒体播放器:

mediaPlayer.release();
mediaPlayer = null;

如果资产目录中只有一个文件,那么您的版本就可以工作。资产目录内容一个接一个地放在一起。因此,如果不指定从何处开始以及读取多少字节,播放器将一直读取到最后,就像它们是一个文件一样

通过使用具有更多参数的setDataSource,您可以实现所需的功能:

player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());

这将允许您定义播放器的限制,并仅播放您在字符串mp3文件中指定的歌曲。

如果资产目录中只有一个文件,则您的版本将正常工作。资产目录内容一个接一个地放在一起。因此,如果不指定从何处开始以及读取多少字节,播放器将一直读取到最后,就像它们是一个文件一样

通过使用具有更多参数的setDataSource,您可以实现所需的功能:

player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());

这将允许您定义播放器的限制,并仅播放您在字符串MP3文件中指定的歌曲。

如何播放这些文件?在这里发布一些代码,我们可以从那里继续。很抱歉,我遗漏了我的代码。我已经重新编辑了我的帖子,添加了我的代码,以及我没有使用res/raw文件夹查找mp3文件的原因。谢谢你的回复!你是怎么播放这些文件的?在这里发布一些代码,我们可以从那里继续。很抱歉,我遗漏了我的代码。我已经重新编辑了我的帖子,添加了我的代码,以及我没有使用res/raw文件夹查找mp3文件的原因。谢谢你的回复!对不起,我遗漏了我的代码。我已经重新编辑了我的帖子,添加了我的代码,以及我没有使用res/raw文件夹查找mp3文件的原因。谢谢你的回复!对不起,我遗漏了我的代码。我已经重新编辑了我的帖子,添加了我的代码,以及我没有使用res/raw文件夹查找mp3文件的原因。谢谢你的回复!杰出的谢谢你的回答!杰出的谢谢你的回答!