2011-12-27 34 views
11

Devo rilevare se un dispositivo HDMI è collegato o meno al mio dispositivo Android. Per questo sto usando un BroadcastReceiver ed è in grado di rilevare anche. Ma con BroadcastReceiver non riesco a gestire lo scenario quando il dispositivo HDMI è collegato ancora prima che la mia applicazione venisse caricata. In questo caso BroadcastReceiver non è in grado di rilevare se un dispositivo HDMI è collegato o meno. C'è un modo per sapere se un dispositivo HDMI è collegato o no in qualsiasi momento?Come verificare lo stato della connessione del dispositivo HDMI in Android?

+0

Condividi il tuo codice di ricezione broadcast. È destinato a funzionare solo per i dispositivi Motorola ... ?? La risposta –

+0

[questa] (https://stackoverflow.com/a/21383495/1921481) ha funzionato per me, ha dovuto solo sostituire l'intento. Invece di "android.intent.action.HDMI_PLUGGED" deve essere "android.intent.action.HDMI_HW_PLUGGED". (Questo avrebbe dovuto essere più di un commento a quella risposta, ma la mia reputazione non mi consente di commentare). –

risposta

6

sono arrivato fino a questo utilizzando le altre risposte e un po 'da altrove:

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

Se stai controllando spesso, che ci si vuole memorizzare il risultato e aggiornarlo con ascoltatore @ di hamen .

0

controllo il file/sys/class/switch/HDMI/stato, se è 1, allora è collegato a un HDMI

+0

suppone che il dispositivo debba essere rootato? – Adi

+0

no, il dispositivo non ha bisogno di essere rootato –

4

mi è uscito con questo alla fine. Funziona su S3 e S4. Dovrebbe funzionare con qualsiasi versione Android 4+.

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 ha bisogno di questo in tag applicazione:

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

Questo mi ha aiutato a scoprire se l'hdmi è connesso o disconnesso, ma non sapendo se l'hdmi è collegato prima di eseguire l'app. – jch

4

è possibile ottenere i dati dal /sys/class/display/display0.hdmi/connect. Se il contenuto del file è 0, HDMI non è collegato, altrimenti se è 1, HDMI è connesso.

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

suppone che il dispositivo debba essere rootato? – Adi

+0

penso che non sia necessario il rooting del dispositivo. –

Problemi correlati