Как получить переменную игрока из примера MediaSessionService в документации?Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Как получить переменную игрока из примера MediaSessionService в документации?

Сообщение Anonymous »

Может быть, это только я, но в разделе Media3 Create a MediaController в документации по Android мне просто не хватает последней части, которая заключается в получении «плеера» и использовании его в компонуемом объекте.
Мне также нужен сеанс для уведомления, и проигрыватель будет воспроизводить URL-адрес, а не локальный носитель.
У меня есть PlaybackService.kt, и это именно то, что указано в документах.

Код: Выделить всё

import android.content.ComponentName
import android.content.Intent
import androidx.media3.common.MediaMetadata
import androidx.media3.common.PlaybackException
import androidx.media3.common.Player
import androidx.media3.session.MediaController
import androidx.media3.session.MediaSession
import androidx.media3.session.MediaSessionService
import androidx.media3.session.SessionToken
import com.google.common.util.concurrent.ListenableFuture
import com.google.common.util.concurrent.MoreExecutors

class PlaybackService : MediaSessionService() {
private lateinit var controllerFuture: ListenableFuture
lateinit var player: MediaController
private var mediaSession: MediaSession? = null

override fun onCreate() {
super.onCreate()
val sessionToken = SessionToken(this, ComponentName(this, PlaybackService::class.java))
controllerFuture =
MediaController.Builder(this, sessionToken).buildAsync()
controllerFuture.addListener({
player = controllerFuture.get()
initController()

}, MoreExecutors.directExecutor())
}

private fun initController() {
player.addListener(object : Player.Listener {

override fun onMediaMetadataChanged(mediaMetadata: MediaMetadata) {
super.onMediaMetadataChanged(mediaMetadata)
}

override fun onIsPlayingChanged(isPlaying: Boolean) {
super.onIsPlayingChanged(isPlaying)
}

override fun onPlaybackStateChanged(playbackState: Int) {
super.onPlaybackStateChanged(playbackState)
}

override fun onPlayerError(error: PlaybackException) {
super.onPlayerError(error)
}

override fun onPlayerErrorChanged(error: PlaybackException?) {
super.onPlayerErrorChanged(error)
}
})
}

override fun onGetSession(controllerInfo: MediaSession.ControllerInfo): MediaSession? =
mediaSession

// The user dismissed the app from the recent tasks
override fun onTaskRemoved(rootIntent: Intent?) {
if (!player.playWhenReady || (player.mediaItemCount == 0)) {
// Stop the service if not playing, continue playing in the background
// otherwise.
stopSelf()
}
}

override fun onDestroy() {
player.stop()
player.release()
super.onDestroy()
}
}
и в AndroidManifest.xml:

Код: Выделить всё


...
...






теперь мне просто нужна эта переменная player в составном объекте.
Может быть, что-то вроде отправки ее на HomeScreen(player: MediaController)
Я пробовал несколько примеров из проектов с открытым исходным кодом, но все они используют MVVM с большими проектами, которые слишком сложны.
Я все еще учусь, мне просто нужно использовать что-то вроде player.play(url: String) и player.stop() по нажатию кнопки и всё.

Подробнее здесь: https://stackoverflow.com/questions/775 ... le-in-docs
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»