Как остановить MediaBrowserServiceCompat?
Мой сервис:
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();
}
Я хочу добавить кнопку закрытия в пользовательском интерфейсе, но как остановить MusicService?, потому что он продолжает кастинг в фоновом режиме
1 ответ
Я объявил метод в 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()
не разрушит службу.
Для остановки из любого места: getActivity(). StopService(новый Intent(getActivity(). GetApplicationContext(), YourServiceName.class));