如何在 Android 中查看 HDMI 设备连接状态?

Posted

技术标签:

【中文标题】如何在 Android 中查看 HDMI 设备连接状态?【英文标题】:How to check the HDMI device connection status in Android? 【发布时间】:2012-01-28 12:03:19 【问题描述】:

我需要检测 HDMI 设备是否连接到我的 android 设备。 为此,我使用了 BroadcastReceiver,它也能够检测到。 但是使用 BroadcastReceiver 时,即使在我的应用程序启动之前连接了 HDMI 设备,我也无法处理这种情况。在这种情况下,BroadcastReceiver 无法找到是否连接了任何 HDMI 设备。 有什么方法可以让我知道任何时候是否连接了任何 HDMI 设备?

【问题讨论】:

分享您的广播接收器代码。是否仅适用于摩托罗拉设备...?? This answer 对我有用,只需要替换意图。而不是“android.intent.action.HDMI_PLUGGED”,它必须是“android.intent.action.HDMI_HW_PLUGGED”。 (这应该是对该答案的更多评论,但我的声誉不允许我发表评论)。 【参考方案1】:

我使用其他答案和其他答案提出了这个问题:

/**
 * Checks device switch files to see if an HDMI device/MHL device is plugged in, returning true if so.
 */
private boolean isHdmiSwitchSet() 

    // The file '/sys/devices/virtual/switch/hdmi/state' holds an int -- if it's 1 then an HDMI device is connected.
    // An alternative file to check is '/sys/class/switch/hdmi/state' which exists instead on certain devices.
    File switchFile = new File("/sys/devices/virtual/switch/hdmi/state");
    if (!switchFile.exists()) 
        switchFile = new File("/sys/class/switch/hdmi/state");
    
    try 
        Scanner switchFileScanner = new Scanner(switchFile);
        int switchValue = switchFileScanner.nextInt();
        switchFileScanner.close();
        return switchValue > 0;
     catch (Exception e) 
        return false;
    

如果您经常检查,您希望存储结果并使用@hamen 的侦听器进行更新。

【讨论】:

我正在尝试在我的 android 应用程序中实现类似的功能,当通过 HDMI 连接的显示器关闭时,我希望视频暂停。如果电视通过 HDMI 连接但处于关机状态,您是否知道文件是否包含 int 10?谢谢,感谢您的帮助。 不抱歉。这个答案是从其他来源收集的,没有一个有任何硬性答案。【参考方案2】:

我最终得出了这个结论。它适用于 S3 和 S4。它应该适用于任何 4+ 的 Android 版本。

public class HdmiListener extends BroadcastReceiver 

    private static String HDMIINTENT = "android.intent.action.HDMI_PLUGGED";

    @Override
    public void onReceive(Context ctxt, Intent receivedIt) 
        String action = receivedIt.getAction();

        if (action.equals(HDMIINTENT)) 
            boolean state = receivedIt.getBooleanExtra("state", false);

            if (state) 
                Log.d("HDMIListner", "BroadcastReceiver.onReceive() : Connected HDMI-TV");
                Toast.makeText(ctxt, "HDMI >>", Toast.LENGTH_LONG).show();    
             else 
                Log.d("HDMIListner", "HDMI >>: Disconnected HDMI-TV");
                Toast.makeText(ctxt, "HDMI DisConnected>>", Toast.LENGTH_LONG).show();
            
        
    

AndroidManifest.xml 需要在应用程序标签中添加这个:

    <receiver android:name="__com.example.android__.HdmiListener" >
        <intent-filter>
            <action android:name="android.intent.action.HDMI_PLUGGED" />
        </intent-filter>
    </receiver>

【讨论】:

这有助于我检测 hdmi 是否已连接或断开,但在运行应用程序之前不知道 hdmi 是否已连接。 @IvanMorgillo @DmitryGinzburg 我正在尝试在我的 android 应用程序中实现类似的功能,我希望在通过 HDMI 连接的显示器关闭时暂停视频。如果电视通过 HDMI 连接但处于关机状态,您是否知道此函数是否返回 truefalse?谢谢,感谢您的帮助。 @Raunaqss 你有什么决定吗? @AleksandrA 有多种可能的方式,您选择的方式取决于硬件、您使用的 android 版本等。尽管如此,谷歌很难访问其私有 HDMI 相关 api。我可以详细说明每种方法。你用的是什么硬件和安卓版本? @Raunaqss 感谢您的回复。 API 17 和 21,Minix X7 和 Minix U1 相应【参考方案3】:

您可以从/sys/class/display/display0.hdmi/connect 获取数据。如果文件内容为0,则不连接HDMI,否则为1,则连接HDMI。

try 
    File file = new File("/sys/class/display/display0.hdmi/connect");
    InputStream in = new FileInputStream(file);
    byte[] re = new byte[32768];
    int read = 0;
    while ((read = in.read(re, 0, 32768)) != -1) 
        String string = new String(re, 0, read);
        Log.v("String_whilecondition", "HDMI state = " + string);
        result = string;
    
    in.close();
 catch (IOException ex) 
    ex.printStackTrace();

【讨论】:

这是否假设设备必须root? 我认为不需要root设备。 SE Linux 可能拒绝访问 sys 文件读取【参考方案4】:

同样的问题。一些 google-ing 告诉我,除了摩托罗拉之外,其他制造商没有太大希望,但是来自http://developer.sonymobile.com/wp/2012/05/29/how-to-use-the-hidden-hdmi-api-tutorial/:

应用程序可以检测设备是否通过 HDMI 连接 通过监听广播意图连接器: “com.sonyericsson.intent.action.HDMI_EVENT”

【讨论】:

【参考方案5】:

检查文件/sys/class/switch/hdmi/state,如果是1,那么它连接到HDMI。

【讨论】:

这是否假设设备必须root?

以上是关于如何在 Android 中查看 HDMI 设备连接状态?的主要内容,如果未能解决你的问题,请参考以下文章

如何检测HDMI设备是否与Node JS连接?

如何在不生根的情况下禁用android设备的hdmi端口?

如何检测 HDMI 设备是不是与 Node JS 连接?

HDMI的CEC是如何控制外围互联设备的

如何检测 Zidoo Digital Android Box 的 HDMI 连接或断开状态?

检测安卓设备中的HDMI端口