How to check the HDMI device connection status in Android?

怎甘沉沦 提交于 2019-11-26 16:35:54

问题


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 BroadcastReceiver I'm unable to handle the scenario when the HDMI device is connected even before my application was launced. In this case the BroadcastReceiver is unable to find if any HDMI device is connected or not. Is there any way I can get to know if any HDMI device is connected or not at any point?


回答1:


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.




回答2:


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>



回答3:


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();
}



回答4:


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"




回答5:


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



来源:https://stackoverflow.com/questions/8644665/how-to-check-the-hdmi-device-connection-status-in-android

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!