【问题标题】:How to play a lot of sounds in background of an activity?如何在活动背景中播放大量声音?
【发布时间】:2015-09-20 11:33:04
【问题描述】:

例如,我想播放 3 首歌曲。当第一首歌曲结束时,第二首歌曲开始,当第二首歌曲结束时,第三首歌曲开始,当第三首歌曲结束时,第一首歌曲再次开始,依此类推。这里用的是mp.setOnCompletionListener吗?

【问题讨论】:

  • Hussein El Feky 是正确的,但是,我建议在后台播放音乐作为服务。

标签: android mp3 android-mediaplayer


【解决方案1】:

你是对的。你可以做一些简单的事情:

public class MainActivity extends Activity {

    MediaPlayer mp1, mp2, mp3;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mp1 = MediaPlayer.create(this, R.raw.music_1);
        mp2 = MediaPlayer.create(this, R.raw.music_2);
        mp3 = MediaPlayer.create(this, R.raw.music_3);

        mp1.start();

        mp1.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {
                mp2.start();
            }
        });

        mp2.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {
                mp3.start();
            }
        });

        mp3.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {
                mp1.start();
            }
        });
    }
}

这将播放mp1和onCompletion,它将播放mp2,并且在mp2的onCompletion,它将播放mp3,并且在mp3的onCompletion,它将再次播放mp1等等......

【讨论】:

  • 我想在1个activity中使用这种方式,其他activity不会播放这些音乐,怎么做?
  • 您可以使用 onPause() 和 onResume() 方法来实现您想要的,但这取决于您的应用程序生命周期。用户是否有能力回到正在播放歌曲的活动?还是你总是调用finish();在开始另一项活动时参加该活动?如果您需要更多帮助,请告诉我您与此活动相关的应用生命周期。
  • 澄清一下我的意思:如果你要开始另一个活动而不完成这个活动,你可以写 onPause() "mp.pause();" 并从 onResume() 重新启动它,但是如果你要开始另一个活动并完成这个活动,你可以调用 "mp.release();" 在 onPause() 方法中。
【解决方案2】:

首先声明3个MediaPlayer文件:

MediaPlayer song1;
MediaPlayer song2;
MediaPlayer song3;

然后初始化MediaPlayer对象:

song1 = MediaPlayer.create(this, R.raw.exampleSong1);
song2 = MediaPlayer.create(this, R.raw.exampleSong2);
song3 = MediaPlayer.create(this, R.raw.exampleSong3);

现在开始第一个媒体文件

song1.start();

现在创建每个实例后,您应该向每个 MediaPlayer 对象添加一个 setOnCompletionListener,如下所示:

song1.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
    @Override
    public void onCompletion(MediaPlayer mp) {
        song2.start();
    }
});

对第二个和第三个 MediaPlayer 文件执行相同操作:

song2.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
    @Override
    public void onCompletion(MediaPlayer mp) {
        song3.start();
    }
});

song3.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
    @Override
    public void onCompletion(MediaPlayer mp) {
        song1.start();
    } 
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    • 1970-01-01
    相关资源
    最近更新 更多