1

我正在尝试创建一个应用程序,该应用程序在打开应用程序时首先播放音乐,然后在播放音乐后执行其余代码。现在我正在做如下的事情:

MusicPlayer mp=new MusicPlayer();
mp.setDataSource("source");
mp.prepare();
mp.start();

do {

} while(mp.isPlaying());

我只是在使用 do-while 循环使系统处于空闲状态,但我认为系统因此而过载,并且仿真器也因此而陷入困境。

有没有有效的方法来做到这一点?

4

2 回答 2

3

有一个回调函数,称为 CompletionListener。你可以设置它:

myPlayer.setOnCompletionListener

你可以在这里找到描述:http: //developer.android.com/reference/android/media/MediaPlayer.html#Callbacks

于 2013-10-02T11:30:11.877 回答
2

我不确定你想做的是正确的事情。如果您阻止 UI 线程并且什么都没有发生,而只是播放了一些音乐,那么用户可能会觉得有些地方出了问题并且无法正常工作。

在发生某些事情时播放音乐会更好 - 显示启动画面、正在下载内容或其他内容。

使用myPlayer.setOnCompletionListener@Manu 所说的调用音乐完成后必须执行的事件/方法。你必须做这样的事情:

public class MyActivity extends Activity {

    private MusicPlayer mp;

    protected void onCreate(...) {
        super.onCreate(...);
        mp = new MusicPlayer();
        mp.setDataSource("source");
        mp.setOnCompletionListener(
            new OnCompletionListener() {

                onCompletion(MediaPlayer player) {
                    otherMethod();                     
                }

            });
    }

    protected void onResume() {
        super.onResume(); 
        playMusic();
    }

    private void playMusic() {
        mp.prepare();
        mp.start();
    }

    // Called when the music is finished.
    private void otherMethod() {
        // Do something.
    }

}
于 2013-10-02T12:05:56.263 回答