尝试使用服务暂停/恢复音乐活动

时间:2013-10-19 15:41:37

标签: android service

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

主要活动

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();
    }
}

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

对于您的服务和活动之间的通信,您可以注册broadcastreceiver并使用意图进行通信或使用bound service

更新: 我找到了以下教程,你最好遵循这个。这是关于使用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

答案 1 :(得分:0)

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