How to check the HDMI device connection status in Android?

前端 未结 5 576
不知归路
不知归路 2020-12-03 05:55

I need to detect whether an HDMI device is connected or not to my Android device. For this I\'m using a BroadcastReceiver and it is able to detect also. But with BroadcastRe

相关标签:
5条回答
  • 2020-12-03 06:07

    check the file /sys/class/switch/hdmi/state, if it's 1 then it's connected to an HDMI.

    0 讨论(0)
  • 2020-12-03 06:14

    Same problem here. Some google-ing told me there's not much hope with other manufacturers besides Motorola, however from http://developer.sonymobile.com/wp/2012/05/29/how-to-use-the-hidden-hdmi-api-tutorial/:

    An application can detect if the device is connect via an HDMI connector by listening to the broadcast intent: "com.sonyericsson.intent.action.HDMI_EVENT"

    0 讨论(0)
  • 2020-12-03 06:17

    You can get the data from /sys/class/display/display0.hdmi/connect. If the content of the file is 0, HDMI is not connected, otherwise if it's 1, HDMI is connected.

    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();
    }
    
    0 讨论(0)
  • 2020-12-03 06:17

    I came up with this using the other answers and some from elsewhere:

    /**
     * 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;
        }
    }
    

    If you're checking often, you'd want to store the result and update it with @hamen's listener.

    0 讨论(0)
  • 2020-12-03 06:27

    I came out with this eventually. It's working on S3 and S4. It should work with any 4+ Android version.

    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 needs this into application tag:

        <receiver android:name="__com.example.android__.HdmiListener" >
            <intent-filter>
                <action android:name="android.intent.action.HDMI_PLUGGED" />
            </intent-filter>
        </receiver>
    
    0 讨论(0)
提交回复
热议问题