通过HDMI

时间:2018-03-21 12:39:38

标签: android hdmi-cec

我正在建立一个Android媒体播放器应用程序,我打算用它来通过HDMI线连接电视上的媒体(视频,图片等)。

我希望在电视的电源状态为OFF时让媒体播放器应用暂停,并希望在电视打开时播放。

当我的Android设备通过HDMI连接到电视时,如何在Android应用程序中检测电视的电源状态?

电视和Android设备都支持HDMI-CEC。有问题的设备是ODROID C2。我在KODI Android应用程序上看到了这个功能,它具有在HDMI-CEC状态为OFF时暂停视频的功能,我也希望在我的应用程序中实现这一功能。

感谢任何帮助。提前谢谢!

编辑:下面的进展

我尝试从此文件/sys/devices/virtual/switch/hdmi/state中读取HDMI连接的状态。但是,无论连接的屏幕/电视的电源状态是ON还是OFF,此文件都会保留int 1

第二次进度更新

我还在努力。不会放弃,一旦我完成了,我肯定会在这里发布答案。

2 个答案:

答案 0 :(得分:1)

在某些电视中,您需要监视( sys / class / amhdmitx / amhdmitx0 / hpd_state )文件夹的更改间隔为500 ms。因为它会在1秒内从1变为0,然后又从0变为1。

答案 1 :(得分:1)

您可以通过注册 ACTION_HDMI_AUDIO_PLUG 来侦听HDMI状态的更改(0表示未插入,1表示已插入)。当电视关闭,切换到任何其他显示媒体或删除HDMI时,它将报告状态0。要了解其技术性,您可以查看热插拔检测如何在HDMI中工作。总体而言,您的应用可以随时监控显示器当前是否可以播放您的内容。我自己在解决方案中(在X96 mini android box和Amazon fire-stick上)实现了这一点,在该解决方案中,我需要确保内容确实在播放,因为其中包括付费内容。另外,我还附有示例代码文件。 注意:该解决方案仅在android设备为HDMI源不沉的情况下才有效!

这里也是文档链接-https://developer.android.com/reference/android/media/AudioManager#ACTION_HDMI_AUDIO_PLUG

private BroadcastReceiver eventReceiver = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
        // pause video
        String action = intent.getAction();

        switch (action) {
            case ACTION_HDMI_AUDIO_PLUG :
                // EXTRA_AUDIO_PLUG_STATE: 0 - UNPLUG, 1 - PLUG
                Toast.makeText(getApplicationContext(),"HDMI PLUGGED OR UNPLUGGED",Toast.LENGTH_LONG).show();
                Log.d("MainActivity", "ACTION_HDMI_AUDIO_PLUG " + intent.getIntExtra(EXTRA_AUDIO_PLUG_STATE, -1));
                ((TextView)(findViewById(R.id.textView))).setText(((TextView)(findViewById(R.id.textView))).getText().toString().concat("At "+System.nanoTime()+": "+intent.getIntExtra(EXTRA_AUDIO_PLUG_STATE, -1) +"\n"));
                break;


        }
    }
};

@Override
protected void onPause() {
    super.onPause();
    unregisterReceiver(eventReceiver);
}

@Override
protected void onResume() {
    super.onResume();
    IntentFilter filter = new IntentFilter();
    filter.addAction(ACTION_HDMI_AUDIO_PLUG);
    registerReceiver(eventReceiver, filter);

}