我需要检测我的 Android 设备是否连接了 HDMI 设备。为此,我正在使用 BroadcastReceiver 并且它也能够检测到。 但是,使用 BroadcastReceiver 时,我无法处理在启动我的应用程序之前就连接了 HDMI 设备的情况。在这种情况下,BroadcastReceiver 无法找到是否连接了任何 HDMI 设备。 有没有办法在任何时候知道是否连接了任何 HDMI 设备?
我需要检测我的 Android 设备是否连接了 HDMI 设备。为此,我正在使用 BroadcastReceiver 并且它也能够检测到。 但是,使用 BroadcastReceiver 时,我无法处理在启动我的应用程序之前就连接了 HDMI 设备的情况。在这种情况下,BroadcastReceiver 无法找到是否连接了任何 HDMI 设备。 有没有办法在任何时候知道是否连接了任何 HDMI 设备?
/**
* 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的监听器更新它。
int
1
或0
?谢谢,任何帮助都将不胜感激。 - Raunaqsspublic 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>
true
还是 false
吗?谢谢,非常感谢任何帮助。 - Raunaqss/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。
我也遇到了同样的问题。一些谷歌搜索告诉我,除了摩托罗拉之外,其他制造商没有太多希望,但是从http://developer.sonymobile.com/wp/2012/05/29/how-to-use-the-hidden-hdmi-api-tutorial/中可以看到:
应用程序可以通过监听广播意图“com.sonyericsson.intent.action.HDMI_EVENT”来检测设备是否通过HDMI连接器连接。