我一直试图使用一个简单的音频播放器的android汽车,并只是从一个链接的音频流。但是当函数被调用时,媒体播放器无法从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函数来调用播放器。
错误:
无法创建媒体播放器W/System.err: java.io.IOException: setDataSource失败。:status=0x80000000 W/System.err: at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1125)方法) W/System.err: at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1160) W/System.err: at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1160) W/System.err: at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1125) W/com.auslanka.app.common.HelloWorldService.player(HelloWorldService.kt:42) W/System.err: at com.auslanka.app.common.HelloWorldService.onCreateSession(HelloWorldService.kt:14) W/System.err: at androidx.car.app.CarAppService.onCreateSession(CarAppService.java:283) W/System.err: at androidx.car.app.CarAppBinder.lambda$onAppCreate$0$androidx-car-app-CarAppBinder(CarAppBinder.java:115) W/System.err: at androidx.car.app.CarAppBinder$$ExternalSyntheticLambda6.dispatch(Unknown来源:8) W/System.err: at androidx.car.app.utils.RemoteUtils.lambda$dispatchCallFromHost$0(RemoteUtils.java:149) W/System.err: at androidx.car.app.utils.RemoteUtils$$ExternalSyntheticLambda2.run(Unknown来源:6) W/System.err: at android.os.Handler.handleCallback(Handler.java:883) W/System.err:
在android.os.Handler.dispatchMessage(Handler.java:100) W/System.err: at android.os.Looper.loop(Looper.java:214) W/System.err: at android.app.ActivityThread.main(ActivityThread.java:7356) W/System.err: at java.lang.reflect.Method.invoke(原生方法) W/System.err: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
我是不是做错了,如果是这样的话,一个关于如何在android汽车中播放音频的小代码指南将是非常感谢的。谢谢。
发布于 2022-12-04 12:12:22
在我看来:媒体播放器无法从URL创建和设置数据源可能有几个原因。首先,检查您是否有正确的URL。确保它不是一个损坏的或无效的URL。此外,如果适用的话,请确保URL已在Android应用程序设置中被白色显示。另外,确保您的应用程序具有访问URL所需的权限。最后,确保Android Auto支持音频格式。如果所有这些都失败了,那么这可能是Android应用本身的一个问题,在这种情况下,您应该联系开发人员寻求帮助。
看看这个例子也许可以帮你解决这个问题:
// Create a MediaSource instance
MediaSource source = new MediaSource.Factory(dataSourceFactory)
.createMediaSource(uri);
// Create an AudioSource instance
AudioSource audioSource = new AudioSource.Factory(dataSourceFactory)
.setTag(TAG)
.createAudioSource();
// Create a media player instance
SimpleExoPlayer player = ExoPlayerFactory.newSimpleInstance(context);
// Prepare the player with the MediaSource
player.prepare(source);
// Set the audio source
player.setAudioSource(audioSource);
// Set the playback parameters
player.setPlaybackParameters(new PlaybackParameters(speed, pitch));
// Start playback
player.playWhenReady(true);发布于 2022-12-04 14:23:31
从技术上讲,这是由于我自己没有在清单中添加网络权限而造成的。事实证明,Mediaplayer和HLS链接我在汽车仿真器中的支持都很好。如果有人看到这个问题,请确保正确添加网络权限。谢谢。
<uses-permission android:name="android.permission.INTERNET"/>和
<application....
android:usesCleartextTraffic="true" .../>https://stackoverflow.com/questions/74671750
复制相似问题