Как проверить состояние подключения устройства HDMI в Android?
Мне нужно определить, подключено ли устройство HDMI к моему устройству Android. Для этого я использую BroadcastReceiver, и он также может обнаружить. Но с BroadcastReceiver я не могу обработать сценарий, когда устройство HDMI подключено даже до того, как мое приложение было запущено. В этом случае BroadcastReceiver не может определить, подключено ли какое-либо устройство HDMI или нет. Могу ли я узнать, подключено ли какое-либо устройство HDMI или нет в любой момент?
5 ответов
Я придумал это, используя другие ответы и некоторые из других:
/**
* 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;
}
}
Если вы часто проверяете, вы хотите сохранить результат и обновить его с помощью слушателя @hamen.
Я вышел с этим в конце концов. Работает на S3 и S4. Должно работать с любой 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 нуждается в этом в теге приложения:
<receiver android:name="__com.example.android__.HdmiListener" >
<intent-filter>
<action android:name="android.intent.action.HDMI_PLUGGED" />
</intent-filter>
</receiver>
Вы можете получить данные из /sys/class/display/display0.hdmi/connect
, Если содержимое файла 0
, HDMI не подключен, в противном случае, если это 1
, HDMI подключен.
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();
}
Проверьте файл /sys/class/switch/hdmi/state, если он равен 1, то он подключен к HDMI
Та же проблема здесь. Некоторые люди в Google сказали мне, что с другими производителями, кроме Motorola, не так уж много надежды, однако с http://developer.sonymobile.com/wp/2012/05/29/how-to-use-the-hidden-hdmi-api-tutorial/:
Приложение может определить, подключено ли устройство через разъем HDMI, прослушивая трансляцию: "com.sonyericsson.intent.action.HDMI_EVENT"