2012-03-21 83 views
3

我遇到了一個我正在創建的應用程序的問題。Android中的MusicPlayer問題(初學者)

基本上,我試圖在我的應用程序的背景中播放音樂,我可以這樣做,它播放的很好。但是,當用戶切換到另一個屏幕時,音樂會重新啓動,而不是像往常一樣繼續。

這裏是所有的代碼,我現在:

public class MainActivity extends Activity {  


MediaPlayer mp; 

protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    //setting the layout 

    mp = MediaPlayer.create(this, R.raw.song); 
    mp.setLooping(true); 
    mp.getDuration(); 
    mp.start(); 

然後我必須在這個類的末尾這種方法停止音樂,當應用程序被關閉:

@Override 
protected void onPause() { 
    // TODO Auto-generated method stub 
    super.onPause(); 


    mp.release(); 
    finish(); 

} 

我不確定要在我的其他課程中包含什麼,以便繼續播放音樂。如果有人能夠證明我會非常感激。

謝謝。

回答

2

您已使Mediaplayer實例依賴於活動。因此,當Activity重新啓動時,onCreate()會再次被調用,並重新開始音樂播放。如果您想繼續播放音樂,請將mp從任何Activity實例中取出並放入服務中。然後從您的MainActivity啓動服務,讓它播放音樂,除非您停止服務。

public class MainActivity extends ListActivity { 




    /** Called when the activity is first created. */ 

Intent i; 
@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.splash); 
     i=new Intent(this, MyMusicService.class); 
     final ToggleButton togglebutton =(ToggleButton)findViewById(R.id.toggleButton1); 
     togglebutton.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       // Perform action on clicks  
       if (togglebutton.isChecked()) { 
        Toast.makeText(MainActivity.this, "Checked", Toast.LENGTH_SHORT).show(); 
        startService(i); 
       } else { 
        stopService(i); 
        Toast.makeText(MainActivity.this, "Not checked", Toast.LENGTH_SHORT).show(); 
         } }}); 





} 
@Override 
    protected void onDestroy() { 
     // TODO Auto-generated method stub 
     super.onDestroy(); 
stopService(i); 
} 
} 

的服務是這樣的:

public class MyMusicService extends Service { 
    MediaPlayer mp; 


@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    mp = MediaPlayer.create(this, R.raw.song); 


     mp.start(); 
mp.setLooping(true); 

    return super.onStartCommand(intent, flags, startId); 
} 


@Override 
public IBinder onBind(Intent intent) { 
    // TODO Auto-generated method stub 
    return null; 
} 
@Override 
public void onDestroy() { 
    // TODO Auto-generated method stub 
    super.onDestroy(); 
    if(mp!=null) 
     mp.release(); 
    mp=null; 
} 
} 
+0

同時在您的清單中註冊該服務 – Akhil 2012-03-21 12:00:03

+0

感謝您的回覆,但是行 super(name); 正在創建錯誤。 – 2012-03-21 12:18:19

+0

現在正在啓動時崩潰。 – 2012-03-21 12:27:55

0

將mp.release()放在onDestroy方法中,而不是在onPause()方法中。 Caz每當新的活動進入界面時,現有的活動就進入暫停狀態。

+0

非常感謝您的答覆。這解決了音樂停止播放的問題。然而,它創造了一個新問題,每次他們進入一個新屏幕並返回到MainActivity類,音樂播放兩次。有任何想法嗎? – 2012-03-21 11:48:02

+0

檢查其他答案。 – Akhil 2012-03-21 11:59:26