2011-12-27 15 views
11

Necesito detectar si un dispositivo HDMI está conectado o no a mi dispositivo Android. Para esto estoy usando un BroadcastReceiver y también es capaz de detectar. Pero con BroadcastReceiver no puedo manejar el escenario cuando el dispositivo HDMI está conectado incluso antes de que se lanzara mi aplicación. En este caso, BroadcastReceiver no puede encontrar si hay algún dispositivo HDMI conectado o no. ¿Hay alguna forma de que pueda saber si algún dispositivo HDMI está conectado o no en algún punto?¿Cómo verificar el estado de conexión del dispositivo HDMI en Android?

+0

Comparta su código de receptor de difusión. ¿Está destinado a funcionar solo para dispositivos Motorola ...? –

+0

[Esta] (https://stackoverflow.com/a/21383495/1921481) respuesta funcionó para mí, solo tuve que reemplazar el intento. En lugar de "android.intent.action.HDMI_PLUGGED" tiene que ser "android.intent.action.HDMI_HW_PLUGGED". (Se suponía que esto era más un comentario de esa respuesta, pero mi reputación no me permite comentar). –

Respuesta

6

me ocurrió esto utilizando las otras respuestas y algunos de otros lugares:

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

Si usted está comprobando a menudo, usted desea almacenar el resultado y actualizarlo con oyente @ de hamen .

0

cheque el archivo/sys/class/conmutador/HDMI/estado, si es 1, entonces está conectado a un HDMI

+0

¿supone esto que el dispositivo debe estar rooteado? – Adi

+0

no, el dispositivo no necesita ser rooteado –

4

me salió con esto a la larga. Está trabajando en S3 y S4. Debería funcionar con cualquier versión 4+ de 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 necesita esta etiqueta en la aplicación:

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

Esto me ayudó a detectar si el hdmi está conectado o desconectado, pero sin saber si el hdmi está conectado antes de ejecutar la aplicación. – jch

4

Usted puede obtener los datos de /sys/class/display/display0.hdmi/connect. Si el contenido del archivo es 0, HDMI no está conectado, de lo contrario si es 1, HDMI está conectado.

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

¿Esto supone que el dispositivo debe estar rooteado? – Adi

+0

, creo que no hay necesidad de rootear el dispositivo. –

Cuestiones relacionadas