所有活动中播放的背景音乐相同

时间:2017-08-20 10:47:53

标签: android android-service

我使用服务在所有活动中播放背景音乐并且它有效。问题是即使我的应用程序处于后台(当用户退出主页按钮或后退按钮时),音乐仍会继续播放。我该如何解决这个问题?

服务类BackgroundSoundService

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.slow_shock);
        player.setLooping(true); // Set looping
        player.setVolume(100,100);

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

    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() {

    }
}

开始
Intent svc = new Intent(this, BackgroundSoundService.class);
    startService(svc);

Android Manifest:

<service android:enabled="true" android:name=".BackgroundSoundService" />

1 个答案:

答案 0 :(得分:2)

发生这种情况是因为该服务仍然在活动中受限制。要在多个活动绑定到服务时终止服务,您需要解除所有服务的绑定,如documentation所述:

  

服务生命周期 - 从创建时到生命周期   被破坏 - 可以遵循以下两种途径之一:

     

已启动的服务

     

当另一个组件调用startService()时,将创建该服务。   然后该服务无限期运行,必须通过调用自行停止   stopSelf()。另一个组件也可以通过调用来停止服务   stopService()。当服务停止时,系统会销毁它。

     

绑定服务

     

当另一个组件(客户端)调用时,将创建该服务   bindService()。然后,客户端通过该服务进行通信   一个IBinder界面。客户端可以通过调用关闭连接   unbindService()。多个客户端可以绑定到同一个服务   当所有这些解除绑定时,系统会破坏服务。服务   不需要自行停止。

     

这两条路径并非完全分开。您可以绑定到服务   已经从startService()开始。例如,你可以   通过调用startService()启动后台音乐服务   标识要播放的音乐的意图。后来,可能的时候了   用户希望对玩家进行一些控制或获取信息   关于当前歌曲,活动可以通过调用绑定到服务   bindService()。在这种情况下,stopService()或stopSelf()   在所有客户解除绑定之前,实际上并没有停止服务。

然后致电Context.stopService()停止它:

context.stopService(new Intent(context, BackgroundSoundService.class));