2011-12-27 12 views
11

मुझे यह पता लगाने की आवश्यकता है कि कोई HDMI डिवाइस कनेक्ट है या नहीं, मेरे एंड्रॉइड डिवाइस पर। इसके लिए मैं ब्रॉडकास्ट रिसीवर का उपयोग कर रहा हूं और यह भी पता लगाने में सक्षम है। लेकिन ब्रॉडकास्ट रिसीवर के साथ मैं परिदृश्य को संभालने में असमर्थ हूं जब एचडीएमआई डिवाइस मेरे एप्लिकेशन लॉन्च होने से पहले भी जुड़ा हुआ है। इस मामले में ब्रॉडकास्ट रिसीवर यह पता लगाने में असमर्थ है कि कोई एचडीएमआई डिवाइस कनेक्ट है या नहीं। क्या कोई तरीका है कि मुझे पता चल सकता है कि कोई एचडीएमआई डिवाइस कनेक्ट है या नहीं?Android में HDMI डिवाइस कनेक्शन स्थिति कैसे जांचें?

+0

अपना प्रसारण रिसीवर कोड साझा करें। क्या मोटोरोला उपकरणों के लिए काम करना है ... ?? –

+0

[यह] (https://stackoverflow.com/a/21383495/1921481) उत्तर मेरे लिए काम किया, बस इरादे को प्रतिस्थापित करना पड़ा। "Android.intent.action.HDMI_PLUGGED" के बजाय इसे "android.intent.action.HDMI_HW_PLUGGED" होना चाहिए। (यह उस उत्तर के लिए एक टिप्पणी का अधिक होना चाहिए था लेकिन मेरी प्रतिष्ठा मुझे टिप्पणी करने की अनुमति नहीं देती है)। –

उत्तर

6

मैं कहीं और से इस अन्य उत्तर का उपयोग कर और कुछ के साथ आया था:

/** 
* 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 के श्रोता के साथ इसे अपडेट करना चाहते हैं ।

0

वही समस्या यहां। कुछ गूगल-आईएनजी ने मुझे बताया वहाँ http://developer.sonymobile.com/wp/2012/05/29/how-to-use-the-hidden-hdmi-api-tutorial/ से मोटोरोला के अलावा अन्य निर्माताओं के साथ बहुत आशा नहीं है, तथापि:

एक आवेदन प्रसारण आशय सुनकर डिवाइस एक HDMI कनेक्टर के माध्यम से कनेक्ट कर रहा है, तो पता लगा सकते हैं: "com .sonyericsson.intent.action.HDMI_EVENT "

0

जांच फ़ाइल/sys/कक्षा/स्विच/HDMI/राज्य, अगर यह 1 तो है यह एक HDMI

+0

क्या ऐसा लगता है कि डिवाइस रूट होना चाहिए? – Adi

+0

नहीं, डिवाइस को रूट करने की आवश्यकता नहीं है –

4

से कनेक्ट हो, मैं अंत में इस के साथ बाहर आया था। यह एस 3 और एस 4 पर काम कर रहा है। इसे किसी भी 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 आवेदन टैग में इस की जरूरत है:

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

इससे मुझे पता चला कि एचडीएमआई कनेक्ट है या डिस्कनेक्ट हो गया है, लेकिन यह नहीं जानना कि ऐप चलाने से पहले एचडीएमआई जुड़ा हुआ है। – jch

4

आप /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(); 
} 
+0

क्या ऐसा लगता है कि डिवाइस रूट होना चाहिए? – Adi

+0

मुझे लगता है कि डिवाइस को रूट करने की कोई आवश्यकता नहीं है। –