2014-10-28 55 views
-1

問題:當我使用home按鈕關閉應用程序時,音樂繼續播放。因此,我通過殺死活動手動關閉應用程序,音樂停止...幾秒鐘,然後重新開始(此時重新啓動以關閉它)。在整個活動中實施音樂

MusicService.class:

package com.MyApp.App; 

import android.app.Service; 
import android.content.Intent; 
import android.media.MediaPlayer; 
import android.media.MediaPlayer.OnErrorListener; 
import android.os.Binder; 
import android.os.IBinder; 
import android.widget.Toast; 

public class MusicService extends Service implements 
    MediaPlayer.OnErrorListener { 

    private final IBinder mBinder = new ServiceBinder(); 
    MediaPlayer mPlayer; 
    private int length = 0; 

    public MusicService() { 
    } 

    public class ServiceBinder extends Binder { 
     MusicService getService() { 
      return MusicService.this; 
     } 
    } 

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

    @Override 
    public void onCreate() { 
     super.onCreate(); 

     mPlayer = MediaPlayer.create(this, R.raw.test_music); 
     mPlayer.setOnErrorListener(this); 

     if (mPlayer != null) { 
      mPlayer.setLooping(true); 
      mPlayer.setVolume(100, 100); 
     } 

     mPlayer.setOnErrorListener(new OnErrorListener() { 

      public boolean onError(MediaPlayer mp, int what, int extra) { 

       onError(mPlayer, what, extra); 
       return true; 
      } 
     }); 
    } 

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

    public void pauseMusic() { 
     if (mPlayer.isPlaying()) { 
      mPlayer.pause(); 
      length = mPlayer.getCurrentPosition(); 
     } 
    } 

    public void resumeMusic() { 
     if (mPlayer.isPlaying() == false) { 
      mPlayer.seekTo(length); 
      mPlayer.start(); 
     } 
    } 

    public void stopMusic() { 
     mPlayer.stop(); 
     mPlayer.release(); 
     mPlayer = null; 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     if (mPlayer != null) { 
      try { 
       mPlayer.stop(); 
       mPlayer.release(); 
      } finally { 
       mPlayer = null; 
      } 
     } 
    } 

    public boolean onError(MediaPlayer mp, int what, int extra) { 

     Toast.makeText(this, "music player failed", Toast.LENGTH_SHORT).show(); 
     if (mPlayer != null) { 
      try { 
       mPlayer.stop(); 
       mPlayer.release(); 
      } finally { 
       mPlayer = null; 
      } 
     } 
     return false; 
    } 
} 

MainPage.class:

package com.MyApp.App; 

import android.content.Intent; 
import android.content.ServiceConnection; 
import android.os.Bundle; 
import android.os.IBinder; 
import android.view.View; 

public class MainPage extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main_page); 

     Intent music = new Intent(); 
     music.setClass(this, MusicService.class); 
     startService(music); 
    } 
    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     mServ.stopMusic(); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     mServ.pauseMusic(); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     mServ.stopMusic(); 
    } 

    private boolean mIsBound = false; 
    private MusicService mServ; 
    private ServiceConnection Scon = new ServiceConnection() { 

     public void onServiceConnected(ComponentName name, IBinder binder) { 
      mServ = ((MusicService.ServiceBinder) binder).getService(); 
     } 

     public void onServiceDisconnected(ComponentName name) { 
      mServ = null; 
     } 
    }; 

    void doBindService() { 
     bindService(new Intent(this, MusicService.class), Scon, 
       Context.BIND_AUTO_CREATE); 
     mIsBound = true; 
    } 

    void doUnbindService() { 
     if (mIsBound) { 
      unbindService(Scon); 
      mIsBound = false; 
     } 
    } 
} 

(注:我已摘錄我的應用程序,所以我可能已經忘記了這段代碼的進口,但所有進口)

回答

1

修正:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main_page); 

    doBindService(); 

    Intent music = new Intent(); 
    music.setClass(this, MusicService.class); 
    startService(music); 
} 

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    doUnbindService(); 
} 
1

enter image description here please red:onCreate,OnPause,OnResume

+1

這是不是一個真正的答案。你應該解釋他做錯了什麼以及如何解決問題,而不是簡單地扔掉關鍵字(其中兩個是OP在他的問題中使用的)。請用文字而不是圖片做這件事。目前,還不清楚這是如何回答這個問題的。 – 2014-10-28 22:17:03