2011-12-27 17 views
11

HDMIデバイスがAndroidデバイスに接続されているかどうかを検出する必要があります。 これは私がBroadcastReceiverを使用しており、これも検出できます。 しかし、BroadcastReceiverでは、アプリケーションが起動される前からHDMIデバイスが接続されている場合のシナリオを処理できません。この場合、BroadcastReceiverはHDMIデバイスが接続されているかどうかを見つけることができません。 HDMIデバイスが接続されているかどうか知る方法はありますか?AndroidでHDMIデバイスの接続状態を確認するにはどうすればよいですか?

+0

ブロードキャスト受信者コードを共有します。モトローラのデバイスのみで動作することを意図していますか? –

+0

[This](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

ここに同じ問題があります。デバイスはHDMI コネクタを介して接続されている場合

アプリケーションは、放送の意図を聞くことによって検出することができます:一部のGoogle-INGはhttp://developer.sonymobile.com/wp/2012/05/29/how-to-use-the-hidden-hdmi-api-tutorial/からしかし、モトローラ以外の他のメーカーとあまり希望がない私に言った 「COM .sonyericsson.intent.action.HDMI_EVENT」

0

は、それが1だならば、それはHDMI

+0

これは、デバイスがルートになっている必要があるとしますか? – Adi

+0

いいえ、デバイスにルートを設定する必要はありません –

4

に接続し、ファイル/ SYS /クラス/切り替え/ HDMI /状態をチェックし、私は最終的にはこれで出てきました。それは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> 
+2

これは、hdmiが接続されているか切断されているかどうかを検出するのに役立ちましたが、hdmiが接続されていることを認識していません。 – 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

私はデバイスを根絶する必要はないと思う。 –