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

如何检测Android合法投屏并排除Android Auto?

检测真实投屏并排除Android Auto误判

核心结论

Android Auto确实会被DisplayManager.getDisplays()识别为额外的Display(属于TYPE_VIRTUAL类型的虚拟显示),因此直接通过Display数量>1的判断逻辑会误判。要区分真实投屏(如Miracast、Chromecast)和Android Auto,需要结合Display的类型和类别属性来筛选。

解决方案

真实投屏的Display通常属于TYPE_EXTERNAL类型,且被归类到DISPLAY_CATEGORY_PRESENTATION(专门用于投屏演示的显示类别),而Android Auto的虚拟显示不会满足这两个条件。可以通过以下步骤实现准确检测:

  1. 获取DisplayManager实例
DisplayManager displayManager = (DisplayManager) getSystemService(Context.DISPLAY_SERVICE);
  1. 筛选符合真实投屏特征的Display
boolean hasRealScreenMirroring = false;

// 遍历所有显示设备
for (Display display : displayManager.getDisplays()) {
    // 优先判断类型:真实投屏为外部显示类型
    if (display.getType() == Display.TYPE_EXTERNAL) {
        // 检查是否属于投屏演示类别
        String[] displayCategories = display.getDisplayCategories();
        for (String category : displayCategories) {
            if (DisplayManager.DISPLAY_CATEGORY_PRESENTATION.equals(category)) {
                hasRealScreenMirroring = true;
                break;
            }
        }
        if (hasRealScreenMirroring) break;
    }
}
  1. 简化判断(直接获取Presentation类别显示)
    也可以直接获取所有属于DISPLAY_CATEGORY_PRESENTATION的Display,这类显示就是真实的投屏设备,Android Auto不会被包含在内:
Display[] presentationDisplays = displayManager.getDisplays(DisplayManager.DISPLAY_CATEGORY_PRESENTATION);
boolean hasRealScreenMirroring = presentationDisplays.length > 0;

原理说明

  • TYPE_EXTERNAL:代表物理连接或无线投屏的外部显示设备(如电视、投影仪)。
  • DISPLAY_CATEGORY_PRESENTATION:系统为投屏场景定义的专属类别,只有用于镜像或演示的外部显示才会被标记该属性。
  • Android Auto的虚拟显示属于TYPE_VIRTUAL,是为车机交互创建的专用虚拟屏,不属于上述两类,因此会被排除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 01:51:06