Я пытался использовать простой аудио-аудиоплеер для 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, будет высоко оценено. Спасибо.
Спасибо за комментарий, и вы правы. Но для меня простое добавление сетевых разрешений помогло.
Технически это произошло из-за моей собственной ошибки, когда я не добавил сетевые разрешения в манифест. Оказывается, и Mediaplayer, и ссылка HLS, которую я использовал, прекрасно поддерживаются в Automotive Emulator. Если кто-то увидит этот вопрос, убедитесь, что вы правильно добавили сетевые разрешения. Спасибо.
<uses-permission android:name = "android.permission.INTERNET"/>
и
<application....
android:usesCleartextTraffic = "true" .../>
Непонятно, видели ли вы/читали: developer.android.com/training/cars/media