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

如何检测Windows 10 UWP环境下其他应用的后台音频播放状态?

解决UWP SDK检测第三方音乐应用播放状态的方案

我完全懂你的痛点——BackgroundMediaPlayer.IsMediaPlaying()确实有很大局限性,尤其是面对网页版流媒体或者没采用UWP官方媒体框架的应用时,完全起不到作用。别担心,我有个更可靠的方案,用Windows 10引入的GlobalSystemMediaTransportControls API就能搞定这个问题。

为什么BackgroundMediaPlayer.IsMediaPlaying()失效?

这个方法只针对那些使用UWP官方BackgroundMediaPlayer框架开发的应用,而网页版Pandora(依托浏览器的原生媒体播放)、部分第三方音乐应用(比如亚马逊音乐可能用了自定义播放逻辑)根本不会被它检测到。而GlobalSystemMediaTransportControlsSessionManager是系统级的媒体会话管理器,能覆盖所有类型的媒体播放场景——不管是UWP应用、桌面应用,还是浏览器里的网页媒体。

具体实现步骤

1. 获取媒体会话管理器实例

首先需要异步获取管理器实例,注意要在UI线程执行(或通过Dispatcher调度):

using Windows.Media.Control;

async Task<GlobalSystemMediaTransportControlsSessionManager> GetSessionManagerAsync()
{
    return await GlobalSystemMediaTransportControlsSessionManager.RequestAsync();
}

2. 检测目标应用的播放状态

拿到管理器后,遍历所有活跃媒体会话,结合应用ID和媒体属性判断是否是目标应用在播放:

async Task<bool> IsTargetMusicAppPlayingAsync()
{
    var sessionManager = await GetSessionManagerAsync();
    if (sessionManager == null)
        return false;

    // 目标应用的AppUserModelId示例,可根据实际版本调整
    var targetAppIds = new List<string>
    {
        "SpotifyAB.SpotifyMusic_zpdnekdrzrea0!App", // Spotify UWP应用
        "Amazon.com.AmazonMusic_3.0.0.0_x64__1e100q00000", // 亚马逊音乐UWP应用
        "Microsoft.MicrosoftEdge_8wekyb3d8bbwe!MicrosoftEdge", // Edge浏览器(网页版Pandora)
        "Google.Chrome_8wekyb3d8bbwe!Chrome" // Chrome浏览器(网页版Pandora)
    };

    foreach (var session in sessionManager.GetSessions())
    {
        var playbackInfo = session.GetPlaybackInfo();
        // 先检查会话是否处于播放状态
        if (playbackInfo.PlaybackStatus == GlobalSystemMediaTransportControlsSessionPlaybackStatus.Playing)
        {
            // 匹配目标应用ID
            if (targetAppIds.Contains(session.SourceAppUserModelId))
            {
                // 针对网页会话,额外验证媒体内容是否来自Pandora
                var mediaProps = await session.TryGetMediaPropertiesAsync();
                if (mediaProps != null && mediaProps.DisplayName.Contains("Pandora", StringComparison.OrdinalIgnoreCase))
                {
                    return true;
                }
                // UWP应用直接匹配ID即可
                return true;
            }
        }
    }
    return false;
}

3. 实时监听播放状态变化

如果需要实时响应播放状态的切换(比如用户中途打开/关闭音乐应用),可以订阅会话变化事件:

async void SetupMediaSessionListener()
{
    var sessionManager = await GetSessionManagerAsync();
    if (sessionManager == null)
        return;

    sessionManager.SessionsChanged += SessionManager_SessionsChanged;
}

private async void SessionManager_SessionsChanged(GlobalSystemMediaTransportControlsSessionManager sender, SessionsChangedEventArgs args)
{
    bool isTargetPlaying = await IsTargetMusicAppPlayingAsync();
    if (isTargetPlaying)
    {
        // 执行SDK静音逻辑
        MuteSdkAudio();
    }
    else
    {
        // 恢复SDK声音
        UnmuteSdkAudio();
    }
}

注意事项

  • 版本兼容性:这个API仅支持Windows 10 1703(Build 15063)及以上版本,如果你的SDK需要兼容更早系统,可以保留BackgroundMediaPlayer作为降级备选方案。
  • 网页媒体的精准检测:网页版Pandora的会话归属浏览器,所以需要通过媒体标题、艺术家等属性进一步验证,避免误判浏览器内的其他媒体播放(比如YouTube视频)。
  • 权限说明:无需额外声明特殊权限,正常打包的UWP应用即可直接使用该API。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:12:56