fix(android) Use startForegroundService and do not delete the notification channel until onDestroy (#4105)
See https://developer.android.com/develop/background-work/services/foreground-services\#fgs-prerequisites See rationale here https://stackoverflow.com/questions/45525214/are-there-any-benefits-to-using-context-startforegroundserviceintent-instead-o Deleting the notification channel while the foreground service is still running is not permitted.
This commit is contained in:
parent
149924ffcb
commit
40872f5ea7
@ -975,7 +975,11 @@ public class ReactExoplayerView extends FrameLayout implements
|
|||||||
Intent intent = new Intent(themedReactContext, VideoPlaybackService.class);
|
Intent intent = new Intent(themedReactContext, VideoPlaybackService.class);
|
||||||
intent.setAction(MediaSessionService.SERVICE_INTERFACE);
|
intent.setAction(MediaSessionService.SERVICE_INTERFACE);
|
||||||
|
|
||||||
themedReactContext.startService(intent);
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
|
themedReactContext.startForegroundService(intent);
|
||||||
|
} else {
|
||||||
|
themedReactContext.startService(intent);
|
||||||
|
}
|
||||||
|
|
||||||
int flags;
|
int flags;
|
||||||
if (Build.VERSION.SDK_INT >= 29) {
|
if (Build.VERSION.SDK_INT >= 29) {
|
||||||
|
@ -63,6 +63,7 @@ class VideoPlaybackService : MediaSessionService() {
|
|||||||
|
|
||||||
mediaSessionsList[player] = mediaSession
|
mediaSessionsList[player] = mediaSession
|
||||||
addSession(mediaSession)
|
addSession(mediaSession)
|
||||||
|
startForeground(mediaSession.player.hashCode(), buildNotification(mediaSession))
|
||||||
}
|
}
|
||||||
|
|
||||||
fun unregisterPlayer(player: ExoPlayer) {
|
fun unregisterPlayer(player: ExoPlayer) {
|
||||||
@ -95,6 +96,10 @@ class VideoPlaybackService : MediaSessionService() {
|
|||||||
|
|
||||||
override fun onDestroy() {
|
override fun onDestroy() {
|
||||||
cleanup()
|
cleanup()
|
||||||
|
val notificationManager: NotificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
|
notificationManager.deleteNotificationChannel(NOTIFICATION_CHANEL_ID)
|
||||||
|
}
|
||||||
super.onDestroy()
|
super.onDestroy()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -209,9 +214,6 @@ class VideoPlaybackService : MediaSessionService() {
|
|||||||
private fun hideAllNotifications() {
|
private fun hideAllNotifications() {
|
||||||
val notificationManager: NotificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
|
val notificationManager: NotificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
|
||||||
notificationManager.cancelAll()
|
notificationManager.cancelAll()
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
|
||||||
notificationManager.deleteNotificationChannel(NOTIFICATION_CHANEL_ID)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun cleanup() {
|
private fun cleanup() {
|
||||||
|
Loading…
Reference in New Issue
Block a user