diff --git a/android/src/main/java/com/brentvatne/exoplayer/VideoPlaybackService.kt b/android/src/main/java/com/brentvatne/exoplayer/VideoPlaybackService.kt
index b60df6fa..4760ea5b 100644
--- a/android/src/main/java/com/brentvatne/exoplayer/VideoPlaybackService.kt
+++ b/android/src/main/java/com/brentvatne/exoplayer/VideoPlaybackService.kt
@@ -20,6 +20,7 @@ import androidx.media3.session.MediaSessionService
import androidx.media3.session.MediaStyleNotificationHelper
import androidx.media3.session.SessionCommand
import com.brentvatne.common.toolbox.DebugLog
+import com.brentvatne.react.R
import okhttp3.internal.immutableListOf
class PlaybackServiceBinder(val service: VideoPlaybackService) : Binder()
@@ -63,7 +64,9 @@ class VideoPlaybackService : MediaSessionService() {
mediaSessionsList[player] = mediaSession
addSession(mediaSession)
- startForeground(mediaSession.player.hashCode(), buildNotification(mediaSession))
+
+ val notificationId = player.hashCode()
+ startForeground(notificationId, buildNotification(mediaSession))
}
fun unregisterPlayer(player: ExoPlayer) {
@@ -224,7 +227,30 @@ class VideoPlaybackService : MediaSessionService() {
mediaSessionsList.clear()
}
+ private fun createPlaceholderNotification(): Notification {
+ val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ notificationManager.createNotificationChannel(
+ NotificationChannel(
+ NOTIFICATION_CHANEL_ID,
+ NOTIFICATION_CHANEL_ID,
+ NotificationManager.IMPORTANCE_LOW
+ )
+ )
+ }
+
+ return NotificationCompat.Builder(this, NOTIFICATION_CHANEL_ID)
+ .setSmallIcon(androidx.media3.session.R.drawable.media3_icon_circular_play)
+ .setContentTitle(getString(R.string.media_playback_notification_title))
+ .setContentText(getString(R.string.media_playback_notification_text))
+ .build()
+ }
+
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ startForeground(PLACEHOLDER_NOTIFICATION_ID, createPlaceholderNotification())
+ }
+
intent?.let {
val playerId = it.getIntExtra("PLAYER_ID", -1)
val actionCommand = it.getStringExtra("ACTION")
@@ -249,6 +275,7 @@ class VideoPlaybackService : MediaSessionService() {
companion object {
private const val SEEK_INTERVAL_MS = 10000L
private const val TAG = "VideoPlaybackService"
+ private const val PLACEHOLDER_NOTIFICATION_ID = 9999
const val NOTIFICATION_CHANEL_ID = "RNVIDEO_SESSION_NOTIFICATION"
diff --git a/android/src/main/res/values/strings.xml b/android/src/main/res/values/strings.xml
index a4c134f0..18f0e907 100644
--- a/android/src/main/res/values/strings.xml
+++ b/android/src/main/res/values/strings.xml
@@ -22,4 +22,8 @@
Playback Speed
Select Playback Speed
+
+ Media playback
+
+ Preparing playback