Java 检测音频或视频播放是否处于活动状态

Java 检测音频或视频播放是否处于活动状态,java,android,Java,Android,我最近在我的应用程序中添加了一个系统音量控制器&我忽略了播放 该应用程序使用可访问性服务检测到音量按钮点击,通过广播“关闭系统对话”来拦截系统音量面板,并弹出“我的覆盖面板”,允许用户直接从面板控制音频(警报、音乐和铃声) 我已经添加了停止检查,如果用户正在通话或屏幕关闭 有没有办法确定android设备当前正在播放视频或音频 我仔细研究了几个API,它们似乎都指向应用程序上下文中的方法,而不是系统范围内的方法。解决方案是创建一个MediaSessionManager实例并检查活动控制器,然后获

我最近在我的应用程序中添加了一个系统音量控制器&我忽略了播放

该应用程序使用可访问性服务检测到音量按钮点击,通过广播“关闭系统对话”来拦截系统音量面板,并弹出“我的覆盖面板”,允许用户直接从面板控制音频(警报、音乐和铃声)

我已经添加了停止检查,如果用户正在通话或屏幕关闭

有没有办法确定android设备当前正在播放视频或音频


我仔细研究了几个API,它们似乎都指向应用程序上下文中的方法,而不是系统范围内的方法。

解决方案是创建一个MediaSessionManager实例并检查活动控制器,然后获取播放类型

MediaController = null;
boolean isCasting = false;
MediaSessionManager mediaSessionManager = (MediaSessionManager)  getSystemService(MEDIA_SESSION_SERVICE);
assert mediaSessionManager != null;
List<MediaController> sessions = mediaSessionManager.getActiveSessions(new ComponentName(this, NotificationListener.class));
     for(MediaController controller : sessions) {
                try {
                    isCasting = Objects.requireNonNull(controller.getPlaybackInfo()).getPlaybackType() == MediaController.PlaybackInfo.PLAYBACK_TYPE_REMOTE;
                } catch (Exception e) {
                    e.printStackTrace();
                }
                if(isCasting){
                    mediaController = controller;
                    break;
                }
            }
MediaController=null;
布尔isCasting=false;
MediaSessionManager MediaSessionManager=(MediaSessionManager)getSystemService(媒体会话服务);
断言mediaSessionManager!=无效的
List sessions=mediaSessionManager.getActiveSessions(新组件名(this,NotificationListener.class));
用于(MediaController:会话){
试一试{
isCasting=Objects.requirennull(controller.getPlaybackInfo()).getPlaybackType()==MediaController.PlaybackInfo.PLAYBACK\u TYPE\u REMOTE;
}捕获(例外e){
e、 printStackTrace();
}
if(isCasting){
mediaController=控制器;
打破
}
}

您需要共享代码以便获得帮助。虽然没有与问题相关的代码,但我没有检测铸造的方法