0

私たちのアプリには MusicService があります。現在、音楽の再生と停止に関しては問題なく動作していますが、それはサービスの開始と停止からです。他のメソッドで呼び出していmp.pause()ますが、null チェッカーで囲まれていないとクラッシュします。しかし、ヌルをチェックすると、まったく機能しません。これはすべて以前に機能していましたが、音楽を停止してもランダムに再生し続けたため、方法を再フォーマットし始めましたが、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 が無効な状態にあるときに一時停止メソッドが呼び出されているように見えます。onPause メソッドを変更して、そのように読むことをお勧めします。

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

これは、実際に再生されているかどうかを確認し、エラー状態を除いて、どの状態でも機能します。少なくともドキュメントによると。

于 2013-04-28T17:27:06.783 に答える