Bir HDMI cihazının bağlı olup olmadığını veya Android cihazıma bağlı olup olmadığını tespit etmem gerekiyor. Bunun için bir BroadcastReceiver kullanıyorum ve bunu da algılayabiliyorum. Ancak BroadcastReceiver Uygulamamın başlamasından önce bile HDMI cihazı bağlandığında senaryoyu kullanamıyorum. Bu durumda BroadcastReceiver, herhangi bir HDMI cihazının bağlı olup olmadığını bulamıyor. Herhangi bir HDMI cihazının bağlı olup olmadığını öğrenmek için herhangi bir yol var mı?Android'de HDMI cihazı bağlantı durumu nasıl kontrol edilir?
cevap
ben başka bir yerden diğer cevaplar kullanarak bu ve bazı ile geldi:
/**
* 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;
}
}
sık sık kontrol ediyorsanız, sonucunu saklamak ve @ Hamen en dinleyici ile güncelleyin isterdim .
Aynı sorun burada. Cihaz HDMI konektör üzerinden bağlanmak durumunda
bir uygulama yayın niyet dinleyerek algılayabilir:: Bazı google-ing http://developer.sonymobile.com/wp/2012/05/29/how-to-use-the-hidden-hdmi-api-tutorial/ gelen ancak Motorola yanı sıra diğer üreticilerle fazla umut olmadığını mı söyledi "com daha sonra 1 ise
çek dosyası/sys/class/switch/HDMI/devlet, bir HDMI
, bu cihazın köklenmesi gerektiğini varsayalım? – Adi
no, aygıtın köklenmesine gerek yok –
bağlı olduğundan .sonyericsson.intent.action.HDMI_EVENT" sonunda bu çıktı. S3 ve S4 üzerinde çalışıyor. Herhangi bir 4+ Android sürümü ile çalışmalıdır.
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 uygulama etiketine bu ihtiyacı:
<receiver android:name="__com.example.android__.HdmiListener" >
<intent-filter>
<action android:name="android.intent.action.HDMI_PLUGGED" />
</intent-filter>
</receiver>
Bu, hdmi'nin bağlı veya bağlantısının kesildiğini algılamamda bana yardımcı oldu, ancak uygulamayı çalıştırmadan önce hdmi'nin bağlı olduğunu bilmemek. – jch
Sen /sys/class/display/display0.hdmi/connect
veri alabilir. Dosyanın içeriği 0
ise, HDMI bağlı değildir, aksi halde 1
ise, HDMI bağlanır.
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();
}
, cihazın köklenmesi gerektiğini varsayar mı? – Adi
Cihazın köklenmesine gerek olmadığını düşünüyorum. –
Yayın alıcı kodunuzu paylaşın. Motorola cihazları için çalışmak için tasarlanmıştır ... –
[This] (https://stackoverflow.com/a/21383495/1921481) cevap benim için çalıştı, sadece niyetini değiştirmek zorunda kaldı. "Android.intent.action.HDMI_PLUGGED" yerine "android.intent.action.HDMI_HW_PLUGGED" olmalıdır. (Bu cevaba daha fazla yorum yapılması gerekiyordu ama itibarım benim yorum yapmama izin vermiyor). –