Comment vérifier l'état de la connexion HDMI dans Android?
je dois détecter si un appareil HDMI est connecté ou non à mon appareil Android. Pour cela, j'utilise un émetteur de radiodiffusion et il est capable de détecter aussi. Mais avec BroadcastReceiver je suis incapable de gérer le scénario où le périphérique HDMI est connecté avant même que mon application ait été lancée. Dans ce cas, L'Émetteur-Récepteur N'est pas en mesure de trouver si un périphérique HDMI est branché ou non. Y a-t-il un moyen de savoir si un périphérique HDMI est connecté ou non?
5 réponses
j'ai trouvé ceci en utilisant les autres réponses et quelques-unes d'ailleurs:
/**
* 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 vous vérifiez souvent, vous voulez stocker le résultat et le mettre à jour avec l'auditeur de @hamen.
je suis finalement sorti avec ça. Ça marche sur S3 et S4. Il devrait fonctionner avec N'importe quelle version 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 a besoin de ceci dans la balise d'application:
<receiver android:name="__com.example.android__.HdmiListener" >
<intent-filter>
<action android:name="android.intent.action.HDMI_PLUGGED" />
</intent-filter>
</receiver>
vous pouvez obtenir les données de /sys/class/display/display0.hdmi/connect
. Si le contenu du fichier est 0
, HDMI n'est pas connecté, sinon si c'est 1
, HDMI est connecté.
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();
}
même problème ici. Certains google-ing m'a dit qu'il n'y a pas beaucoup d'espoir avec d'autres fabricants à part Motorola, cependant de http://developer.sonymobile.com/wp/2012/05/29/how-to-use-the-hidden-hdmi-api-tutorial / :
une application peut détecter si l'appareil est connecté via un HDMI connecteur en écoutant l'émission intention: "COM.sonyericsson.intention.action.HDMI_EVENT "
vérifier le fichier / sys / class/switch/hdmi / state, si c'est 1 alors il est connecté à un HDMI