如何停止MediaLibraryService:media3 android

mcvgt66p  于 2023-05-15  发布在  Android
关注(0)|答案(2)|浏览(119)

我想停止一个前台服务,该服务仅在单击Activity上的特定按钮后才扩展MediaLibrarySession,因此我尝试:

val serviceIntent = Intent(this@PartyHostActivity, PlayerService::class.java)
stopService(serviceIntent)

val serviceIntent = Intent(this@PartyHostActivity, PlayerService::class.java)
startService(serviceIntent)
stopService(serviceIntent)

但它们都没有停止服务,MediaLibraryService上的onDestroy函数从未被调用!!!!为什么?!!!!

7eumitmz

7eumitmz1#

stopService()方法可能不会立即停止服务。
对于前台服务,您需要在服务的代码中显式调用stopForeground(true),以从前台删除服务并允许其停止。这将触发MediaLibraryService中的onDestroy()方法。
在您的活动中:

// Start the service
val serviceIntent = Intent(this@PartyHostActivity, PlayerService::class.java)
startService(serviceIntent)

// Stop the service when the specific button is clicked
specificButton.setOnClickListener {
    val stopIntent = Intent(this@PartyHostActivity, PlayerService::class.java)
    stopIntent.action = "STOP_SERVICE"
    startService(stopIntent)
}

在您的MediaLibraryService中:

class PlayerService : Service() {
    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
        if (intent?.action == "STOP_SERVICE") {
            // Stop the foreground service and allow it to be stopped
            stopForeground(true)
            stopSelf()
        } else {
            // Start the foreground service
            // Perform other necessary operations
        }
        return START_STICKY
    }
    // override other functions as you wish

}

通过发送带有操作“STOP_SERVICE”的Intent,您可以将停止服务的请求与其他启动请求区分开来。在onStartCommand()方法中,检查此操作,然后调用stopForeground(true)stopSelf()以正确停止服务。

bf1o4zei

bf1o4zei2#

问题是我在服务上运行了两个线程,并且我没有为sessionplayer调用release()方法,因此stopForeground()stopSelf()无法工作。我尝试创建一个方法来停止和释放所有,并在onStartCommand方法上调用了该方法,操作为"STOP_SERVICE",如答案hereonDestroy()已成功调用

相关问题