You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为已有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
}

四、测试验证

  1. 测试设备开启开发者选项,启用Android Auto调试(设置>开发者选项>Android Auto调试)
  2. 启动DHU(Desktop Head Unit)并连接测试设备
  3. 安装MAUI应用到设备,启动后在DHU的媒体栏中查找应用入口

内容的提问来源于stack exchange,提问作者user1613217

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 23:13:23