我的服务:
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
?它继续在后台投射。
答案 0 :(得分: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()
并不会破坏服务。
答案 1 :(得分:0)
从任何地方停下来: getActivity()。stopService(new Intent(getActivity()。getApplicationContext(),YourServiceName.class));