Android Automotive Не удалось создать медиаплеер, и setDataSource не удалось

Я пытался использовать простой аудио-аудиоплеер для Android Auto и просто транслировать аудио по ссылке. Но когда функция вызывается, медиаплеер не может установить источник данных из URL-адреса. и он вернет следующую ошибку.

Код :

class HelloWorldScreen(carContext: CarContext) : Screen(carContext) {
override fun onGetTemplate(): Template {
    val mGridIcon = IconCompat.createWithResource(
        carContext, R.drawable.mainscreenlogo
    )

    val gridItemCar = GridItem.Builder()
        .setTitle("Car Info")
        .setImage(
            CarIcon.Builder(mGridIcon).build(),
            GridItem.IMAGE_TYPE_LARGE
        ).setOnClickListener(this::player).build()
    val gridList = ItemList.Builder()
        .addItem(gridItemCar).build()
   return GridTemplate.Builder()
        .setSingleList(gridList)
        .build()
}
private fun player(){
    var mediaPlayer = MediaPlayer()

    var audioUrl = "https://url"

    var customUri: Uri = Uri.parse(audioUrl)


    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC)
    mediaPlayer.setAudioAttributes(
        AudioAttributes. Builder()
            .setUsage(AudioAttributes.USAGE_MEDIA)
            .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
            .build()
    )
    if (!mediaPlayer.isPlaying){
        try {

            mediaPlayer.setDataSource(audioUrl)
            mediaPlayer.prepareAsync()
            mediaPlayer.setOnPreparedListener {
                mediaPlayer.start()
            }
        } catch (e: Exception) {
            e.printStackTrace()
        }
        Log.d("Player" , "Audio started playing..") }
    else {
        if (mediaPlayer.isPlaying) {
            mediaPlayer.stop()
            mediaPlayer.reset()
            //  mediaPlayer.release()
            Log.d("Player" , "Player Released")
            mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC)


        } else {
            Log.d("Player" , "Audio not played.. Check Error")
        }
    }
}}

Я использовал функцию player для вызова player .

Ошибка:

E/MediaPlayerNative: невозможно создать медиаплеер W/System.err: java.io.IOException: сбой setDataSource.: status=0x80000000 W/System.err: в android.media.MediaPlayer.nativeSetDataSource (собственный метод) W/System.err: в android.media.MediaPlayer.setDataSource(MediaPlayer.java:1173) W/System.err: в android.media.MediaPlayer.setDataSource(MediaPlayer.java:1160) W/System.err: в android.media.MediaPlayer.setDataSource(MediaPlayer.java:1125) W/System.err: в com.auslanka.app.common.HelloWorldService.player(HelloWorldService.kt:42) W/System.err: в com.auslanka.app.common.HelloWorldService.onCreateSession(HelloWorldService.kt:14) W/System.err: в androidx.car.app.CarAppService.onCreateSession(CarAppService.java:283) W/System.err: в androidx.car.app.CarAppBinder.lambda$onAppCreate$0$androidx-car-app-CarAppBinder(CarAppBinder.java:115) W/System.err: в androidx.car.app.CarAppBinder$$ExternalSyntheticLambda6.dispatch(Неизвестно Источник: 8) W/System.err: в androidx.car.app.utils.RemoteUtils.lambda$dispatchCallFromHost$0(RemoteUtils.java:149) W/System.err: в androidx.car.app.utils.RemoteUtils$$ExternalSyntheticLambda2.run(Неизвестно Источник: 6) W/System.err: в android.os.Handler.handleCallback(Handler.java:883) W/System.err:
в android.os.Handler.dispatchMessage(Handler.java:100) W/System.err: в android.os.Looper.loop(Looper.java:214) W/System.err: в android.app.ActivityThread.main(ActivityThread.java:7356) W/System.err: в java.lang.reflect.Method.invoke (собственный метод) W/System.err: в com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) W/System.err: в com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

Я делаю это неправильно, если это так, небольшое руководство по коду о том, как воспроизводить звук в Android Auto, будет высоко оценено. Спасибо.

Непонятно, видели ли вы/читали: developer.android.com/training/cars/media

Morrison Chang 04.12.2022 01:05

Спасибо за комментарий, и вы правы. Но для меня простое добавление сетевых разрешений помогло.

Thivanka Sarathchandra 04.12.2022 15:25
0
2
67
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Технически это произошло из-за моей собственной ошибки, когда я не добавил сетевые разрешения в манифест. Оказывается, и Mediaplayer, и ссылка HLS, которую я использовал, прекрасно поддерживаются в Automotive Emulator. Если кто-то увидит этот вопрос, убедитесь, что вы правильно добавили сетевые разрешения. Спасибо.

<uses-permission android:name = "android.permission.INTERNET"/>

и

<application....

android:usesCleartextTraffic = "true" .../>

Другие вопросы по теме