2014-12-20 63 views
5

我花了大約20個小時到現在,我的問題仍然存在。 我正在創建一個有幾個活動(mainMenu,aboutUs,設置)的android應用程序。 我遵循以下最好的回答鏈接,那是O.K。 Music played using asyncTask isn't stopping by using cancel在Android應用的所有活動中播放背景音樂

當我運行我的應用程序(我的代碼位於mainActivity中)時,音樂開始播放,導航到其他活動時不會停止。這是很好的。 但我把一個ToggleButton在我的setting_activity活動,我希望這個按鈕啓動和停止這個音樂。現在我的問題是如何停止和/或從setting_activity重新啓動音樂?

在另一個解決方案中: 我創建了一個類MusicManager,我稱它爲「開始和停止」。 但是,這幾個問題太:

  1. 音樂在mainMenu_activity啓動,但只玩了約15秒,然後停止。
  2. 我無法從另一停止音樂activities.At這段時間我在mainMenua_ctivity播放音樂,因爲這行代碼:

    MusicManager mm = new MusicManager(this, R.raw.background_sound); 
    mm.play(); 
    

我怎樣才能停止播放嗎? 3.當我導航到其他活動時,音樂停止。

public class MusicManager implements OnPreparedListener { 

    static MediaPlayer mPlayer; 
    Context context; 
    private int mySoundId; 

    public MusicManager(Context ctx, int musicID) { 
     context = ctx; 
     mySoundId = musicID; 
     mPlayer = MediaPlayer.create(context, mySoundId); 
     mPlayer.setOnPreparedListener(this); 
    } 

    public void play() { 
     mPlayer = MediaPlayer.create(context, mySoundId); 

    } 

    public void stop() { 
     mPlayer.stop(); 
     mPlayer.release(); 
    } 

    @Override 
    public void onPrepared(MediaPlayer player) { 
     player.start(); 
     mPlayer.setLooping(true); 
     mPlayer.setVolume(25, 25); 

    } 

} 

最後,我想在沒有停止/開始音樂的所有活動中播放背景音樂。 我該怎麼做?

回答

7

您可以將音樂播放器放入服務中。這將使它與活動無關,並且您仍然可以通過意圖控制播放。

下面是關於它的一些代碼例如:https://stackoverflow.com/a/8209975/2804473 下面通過Synxmax這裏在StackOverflow的寫入,和覆蓋在上面的鏈接的代碼:

public class BackgroundSoundService extends Service { 
    private static final String TAG = null; 
    MediaPlayer player; 
    public IBinder onBind(Intent arg0) { 

     return null; 
    } 
    @Override 
    public void onCreate() { 
     super.onCreate(); 
     player = MediaPlayer.create(this, R.raw.idil); 
     player.setLooping(true); // Set looping 
     player.setVolume(100,100); 

    } 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     player.start(); 
     return 1; 
    } 

    public void onStart(Intent intent, int startId) { 
     // TO DO 
    } 
    public IBinder onUnBind(Intent arg0) { 
     // TO DO Auto-generated method 
     return null; 
    } 

    public void onStop() { 

    } 
    public void onPause() { 

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

    @Override 
    public void onLowMemory() { 

    } 
} 
+1

我創建的類與上述相同的和在main_activity類onCreate()我寫了Intent svc = new Intent(this,BackgroundSoundService.class); startService(svc); ,但我的音樂沒有播放。 – saeid

+0

@ saeid112看看這裏以及http://www.codeproject.com/Articles/258176/Adding-Bgroundground-Music-to-Android-App –

+0

真的卡在這!令人難以置信的是,一項服務無法從其他活動中控制。 –