Videoview кража событие MediaButton, когда приложение имеет MediaBrowserService - PullRequest
0 голосов
/ 18 февраля 2020

Я использую Videoview для воспроизведения анимационного видео в l oop. Я заметил, что всякий раз, когда воспроизводится видео, если любое другое приложение musi c воспроизводит звук, и я нажимаю headset buttons(pause/play), события мультимедийных кнопок не отправляются в приложение воспроизведения musi c. Вместо этого он отправляется на мой ExampleService, который простирается от MediaBrowserServiceCompat. Videoview крадет эти события медиа-кнопки. Я использую даже AudioManager.AUDIO_FOCUS_NONE.

Я заметил, что когда мое приложение открывается и воспроизводится видео, я вижу журнал в трассировке стека, который

D/MediaSessionService: Media button session is changed to com.example.mediasessiontest/ExampleService (userId=0)

Есть ли способ воспроизвести видео без запроса для события Mediabutton?

  1. Если я не воспроизводю видео в своем приложении, события гарнитуры будут правильно перенаправлены в приложение, которое воспроизводит музыку c
  2. Это происходит только на Android 8 and 9. Работает нормально на Android 10.
  3. Пробовал даже Surfaceview с Mediaplayer для воспроизведения видео. Но заметил ту же проблему.

    private val VIDEO_BASE_PATH = "android.resource://"
    videoView.setAudioFocusRequest(AudioManager.AUDIOFOCUS_NONE)
    videoView.setMediaController(null)
    videoView.setVideoPath(VIDEO_BASE_PATH + packageName + "/" + R.raw.test_video)        
    videoView.setOnPreparedListener { player ->
       player.isLooping = true
       player.start() //This causes the media button sesssion to be changed
    }
    

    Пробовал использовать Surfaceview с Mediaplayer. Но результат тот же. Похоже на ошибку в ОС 8 and 9?

...