我的服务:
public class MusicService extends MediaBrowserServiceCompat {
...
}
我的活动:
public class MediaActivity extends AppCompatActivity{
private MediaBrowserCompat mMediaBrowser;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mMediaBrowser = new MediaBrowserCompat(this,
new ComponentName(this, MusicService.class), mConnectionCallback, null);
mMediaBrowser.connect();
}
@Override
protected void onDestroy() {
super.onDestroy();
mMediaBrowser.disconnect();
}
我想在UI中添加关闭按钮,但是如何停止
MusicService
?它继续在后台投射。 最佳答案
我在MediaSessionConnection
中声明了一个方法: class MediaSessionConnection( val context: Context, private val serviceComponent: ComponentName ) { ... fun release() { mediaBrowser.disconnect() mediaController.sendCommand("disconnect", null, null) } ... }
在MusicService
中: class MusicService : MediaBrowserServiceCompat() { override fun onCreate() { super.onCreate() ... mediaSessionConnector = MediaSessionConnector(mediaSession, object : DefaultPlaybackController() { override fun onCommand(player: Player?, command: String?, extras: Bundle?, cb: ResultReceiver?) { if (command == "disconnect") { stopForeground(true) stopSelf() } } override fun getCommands(): Array { return arrayOf("disconnect") } }) } }
我并不是说这是完全停止服务的正确方法,但这是我在奋斗了几个小时后才想到的解决方案。
如果未执行mediaBrowser.disconnect()
,则stopSelf()
不会破坏该服务(通过告诉“销毁该服务”,我预计将调用onDestroy()
)。
如果不显式执行stopForeground()
和stopSelf()
,仅执行mediaBrowser.disconnect()
不会破坏服务。