0

在我们的应用程序中,我们有一个 MusicService。目前,它在播放音乐和停止音乐方面工作得非常好,但那是从启动和停止服务开始。我们在其他方法中调用它,但mp.pause()除非它被空检查器包围,否则它会崩溃。但是当它检查空值时它根本不起作用。我们之前已经完成了所有这些工作,但我们开始重新格式化这样做的方式,因为Android 4.0 (ICS)即使我们停止音乐,音乐也会继续随机播放,但无论如何这不是重点。

public class MusicService extends Service {
    public static MediaPlayer mp;

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

    @Override
    public void onCreate() {
        super.onCreate();
        mp = MediaPlayer.create(this, R.raw.title_music);
        mp.setLooping(true);
        mp.setVolume(200, 200);
    }

    @Override
    public int onStartCommand(final Intent intent, final int flags, final int startId) {
        mp.start();
        return 1;
    }

    @Override
    public void onStart(final Intent intent, final int startId) {

    }

    public IBinder onUnBind(final Intent arg0) {
        return null;
    }

    public static void onStop() {
        mp.stop();
        mp.release();
    }

    public static void onPause() {
        if (mp!=null) {
            mp.pause();
        }
    }

    public static void onResume() {
        if (mp!=null) {
            mp.start();
        }
    }


    @Override
    public void onDestroy() {
          mp.stop();
          mp.release();
          super.onDestroy();
    }

    @Override
    public void onLowMemory() {
        mp.stop();
        mp.release();
    }

}

我们正在使用它在另一个活动中启动服务:

intent = new Intent(this, MusicService.class);
    startService(intent);
4

1 回答 1

0

如果没有日志,我不能 100% 肯定地说这是问题所在,但似乎在 mp 处于无效状态时正在调用 pause 方法。我建议你改变你的 onPause 方法,让它看起来像这样。

public static void onPause() {
    if (mp!=null) {
        if (mp.isPlaying())
            mp.pause();
    }
}

这将检查它是否真的在播放,并且适用于它所处的任何状态,除了错误状态。至少根据文档。

于 2013-04-28T17:27:06.783 回答