2016-12-29 87 views
-1

我有一項服務,可以在我所有應用程序的活動中播放背景音樂。 在每一次活動我說:背景音樂服務不關閉

public void onPause() { 
    super.onPause(); 
    stopService(new Intent(OpenerPlay.this, MusicDoctorService.class)); 

} 

public void onStop() { 
    super.onStop(); 
    stopService(new Intent(OpenerPlay.this, MusicDoctorService.class)); 

} 

public void onResume() { 
    super.onResume(); 
    startService(new Intent(OpenerPlay.this, MusicDoctorService.class)); 

} 

public void onRestart() { 
    super.onRestart(); 
    startService(new Intent(OpenerPlay.this, MusicDoctorService.class)); 

} 

我的目的是停止或恢復服務時,我關閉應用程序或關閉屏幕,播放音樂。但是當我切換到另一個活動時,它也會停止。 我應該改變我的服務代碼中的內容嗎? 最後:我希望我的服務播放音樂,以停止屏幕關閉或應用程序關閉,但不會在活動切換期間播放。

服務:

public class MyService extends Service { 


private 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.music); 
    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; 
} 


protected void onStop() { 
    player.pause(); 
} 

public void onPause() { 
    player.pause(); 
} 

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

@Override 
public void onLowMemory() { 

} 

}

回答

0

試試這個在您的活動的方法的onDestroy ...

@Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     if(isMyServiceRunning(MyService.class)) 
     { 
      stopService(new Intent(this, MyService.class)); 
     } 
    } 


private boolean isMyServiceRunning(Class<?> serviceClass) { 
     ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 
     for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { 
      if (serviceClass.getName().equals(service.service.getClassName())) { 
       return true; 
      } 
     } 
     return false; 
    } 

這裏當活動結束後,你應該停止服務..

同樣在您的服務中,您應該發佈mediaplayer

@Override 
protected void onPause() { 
    super.onPause(); 
    if (mediaPlayer != null){ 
     mediaPlayser.stop(); 
     if (isFinishing()){ 
     mediaPlayer.stop(); 
     mediaPlayer.release(); 
     } 
    } 
}