如何检查Android设备上是否有任何应用正在播放媒体?

4

我正在开发一款遥控器,用于 Android TV 设备和 Smartthings Hub 的集成。我想要检查设备(Android TV)上是否有任何媒体应用在播放。

例如,如果 Youtube 或 Plex 应用程序正在播放电影,则将向用户显示 "播放中",如果没有应用程序正在播放任何内容,则将显示 "停止"。

如果有任何类型的媒体(音频或视频)正在播放,则必须了解这一点。

我尝试使用以下代码来启动 Android 媒体播放器,但它没有起作用:

            final MediaPlayer player = new MediaPlayer();
            if(player.isPlaying()) {
                response.send("playing");
            }
            else {
                response.send("stopped");
            }

我不确定这个实例是否会附加到活动的媒体播放器上,而且我找不到正确的方法。我缺了什么?


请检查我的答案 - ismail alaoui
1个回答

1

如果涉及声音,应该使用 AudioManager,请查看文档

AudioManager.isMusicActive();

对于视频来说,SurfaceFlinger 进程可以知道它正在以一个一致的速度接收帧,但它无法知道它是一个视频还是应用程序动画。
mediaserver 进程负责管理硬件视频解码器。它可以知道是否正在解码视频,但它无法知道是否正在显示视频。如果应用程序使用自定义的纯软件解码器,则 mediaserver 不会参与其中。
没有一种明确的方法来检测视频是否正在播放并在显示器上呈现。

我对它是视频还是音频不感兴趣。所以,如果我检查Audiomanager并且isMusicActive为true,这是否意味着正在播放音频或视频?(如果我们假设每个视频都有声音)我的意思是,当播放带有声音的视频时,isMusicActive会是真的吗? - ilker Aktuna
视频并不意味着音频。例如,行车记录仪的录像可能只有视频没有音频。此外,视频是纯前台的东西。因此,isMusicActive()将对其他音频应用程序返回true,这就是为什么我建议您使用surfaceFlinger的原因。 - ismail alaoui
我尝试了AudioManager的解决方案。它有效。由于我正在处理Android TV,大多数情况下媒体意味着音频+视频。如果有无声视频的情况,那将是一个例外。谢谢。 - ilker Aktuna
顺便说一句,我也按照你的建议检查了SurfaceFlinger,但是没有找到太多关于它的信息或示例用法。你知道在哪里可以找到用法示例吗? - ilker Aktuna
1
请查看此链接,它可能会对您有所帮助:https://www.bradcypert.com/what-is-androids-surfaceflinger/ - ismail alaoui

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接