2

我正在尝试在其布局中创建一个带有一个按钮的活动,该按钮将在按下时暂停或恢复音乐。问题是当它被按下以恢复音乐时,它会重新启动音频文件。知道如何让它从它停止的最后一点开始播放而不是重新启动它吗?

主要活动

public class MainActivity extends Activity implements OnClickListener {

    private Boolean isMusicPlaying;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        View musicButton = findViewById(R.id.music_button);
        musicButton.setOnClickListener(this);
        startService(new Intent(getBaseContext(), MusicService.class));
        isMusicPlaying = true;
    }

    @Override
    public void onClick(View v) {
        if (v.getId() == R.id.music_button)
            if (isMusicPlaying) stopService(new Intent(getBaseContext(),
                    MusicService.class));
            else startService(new Intent(getBaseContext(), MusicService.class));
        isMusicPlaying = !isMusicPlaying;
    }
}

服务等级

public class MusicService extends Service {

    MediaPlayer player;

    @Override
    public IBinder onBind(Intent arg0) {
        return null;
    }

    public void onCreate() {
        super.onCreate();
        player = MediaPlayer.create(this, R.raw.song);
        player.setLooping(true); // Set looping
        player.setVolume(100, 100);
    }

    public int onStartCommand(Intent intent, int flags, int startId) {
        player.start();
        return START_STICKY;
    }

    @Override
    public void onDestroy() {
        player.pause();
    }
}
4

2 回答 2

1

当您停止服务时,似乎没有保留服务中的 MediaPlayer 对象。您可以在停止服务之前使用 getCurrentPosition() 方法获取歌曲的当前位置,

player.pause();
currentPos = player.getCurrentPosition();

并在活动停止之前将此值发送回活动。

然后,您可以在播放前使用 seekTo(int) 方法移动到指定的时间位置。

player.seekTo(currentPos);
player.start();

对于您的服务和活动之间的通信,您可以注册广播接收器并使用意图或使用绑定服务进行通信。

更新:我找到了以下教程,你最好遵循这个。这是关于使用 MediaPlayer 的服务。特别是,当您初始化 MediaPlayer 时,您根本没有使用 prepare 方法。把这些行:

player.setOnPreparedListener(this);
player.prepareAsync();

并添加监听器:

public void onPrepared(MediaPlayer player) {
    player.start();
}

http://developer.android.com/guide/topics/media/mediaplayer.html#mpandservices

于 2013-10-19T16:20:06.920 回答
0

看到活动重新开始为什么不将状态保存到共享首选项

于 2014-02-10T02:50:57.927 回答