如何为已有MAUI应用添加Android Auto媒体播放器支持
MAUI集成Android Auto媒体播放器入门示例
一、清单文件补充配置
除你已添加的com.google.android.gms.car.application相关元数据,还需确保媒体服务的完整声明,核心配置片段如下:
<service android:name=".MyCarMediaService" android:exported="true"> <intent-filter> <action android:name="android.media.browse.MediaBrowserService" /> </intent-filter> <meta-data android:name="com.google.android.gms.car.application" android:resource="@xml/automotive_app_desc" /> </service> <!-- 必要权限声明 --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="com.google.android.gms.permission.CAR_MEDIA_CONTENT_PROVIDER" />
同时在Resources/xml目录下创建automotive_app_desc.xml,内容:
<automotiveApp xmlns:android="http://schemas.android.com/apk/res/android"> <uses name="media" /> </automotiveApp>
二、实现Android端媒体服务
在MAUI的Android项目中创建继承自MediaBrowserServiceCompat的服务类,处理媒体浏览与播放控制:
using Android.App; using Android.Content; using Android.Media.Browse; using Android.Media.Session; using Android.OS; using Android.Support.V4.Media.Session; namespace YourMauiApp.Droid; [Service(Exported = true)] [IntentFilter(new[] { MediaBrowserService.ActionMediaBrowserService })] public class MyCarMediaService : MediaBrowserServiceCompat { private MediaSessionCompat _mediaSession; private MediaSessionCompat.Callback _sessionCallback; public override void OnCreate() { base.OnCreate(); // 初始化媒体会话 _sessionCallback = new MediaSessionCallback(); _mediaSession = new MediaSessionCompat(this, "MyCarMediaSession"); _mediaSession.SetCallback(_sessionCallback); _mediaSession.SetFlags(MediaSessionCompat.FlagHandlesMediaButtons | MediaSessionCompat.FlagHandlesTransportControls); SessionToken = _mediaSession.SessionToken; } public override BrowserRoot OnGetRoot(string clientPackageName, int clientUid, Bundle rootHints) { // 允许客户端访问(可按需限制) return new BrowserRoot("root", null); } public override void OnLoadChildren(string parentId, Result result) { // 构造示例媒体列表 var mediaItems = new List<MediaBrowser.MediaItem>(); var mediaMetadata = new MediaMetadataCompat.Builder() .SetTitle("示例歌曲") .SetArtist("示例艺术家") .SetMediaType(MediaMetadataCompat.MediaTypeMusic) .Build(); var mediaItem = new MediaBrowser.MediaItem(mediaMetadata.Description, MediaBrowser.MediaItem.FlagPlayable); mediaItems.Add(mediaItem); result.SendResult(mediaItems); } private class MediaSessionCallback : MediaSessionCompat.Callback { public override void OnPlay() { // 触发MAUI端播放逻辑 base.OnPlay(); } public override void OnPause() { // 触发MAUI端暂停逻辑 base.OnPause(); } } }
三、MAUI端播放状态同步
在MAUI共享代码中,同步播放状态到Android媒体会话,确保Android Auto能识别播放状态:
// 示例播放按钮点击事件 private void PlayButton_Clicked(object sender, EventArgs e) { // 执行MAUI端播放逻辑 // 同步状态到Android媒体会话 #if ANDROID var mediaSession = ((YourMauiApp.Droid.MyCarMediaService)Android.App.Application.Context.GetSystemService(typeof(YourMauiApp.Droid.MyCarMediaService)))?._mediaSession; mediaSession?.SetPlaybackState(new PlaybackStateCompat.Builder() .SetState(PlaybackStateCompat.StatePlaying, 0, 1f) .Build()); #endif }
四、测试验证
- 测试设备开启开发者选项,启用Android Auto调试(设置>开发者选项>Android Auto调试)
- 启动DHU(Desktop Head Unit)并连接测试设备
- 安装MAUI应用到设备,启动后在DHU的媒体栏中查找应用入口
内容的提问来源于stack exchange,提问作者user1613217
相关产品推荐
相关产品推荐

