通过HDMI检测连接到Android设备的电视电源状态的变化

通过HDMI检测连接到Android设备的电视电源状态的变化,android,hdmi-cec,Android,Hdmi Cec,我正在构建一个Android媒体播放器应用程序,我打算在通过HDMI电缆连接的同时在电视上播放媒体(视频、图片等) 我想让media player应用程序在电视的电源状态为关闭时暂停,并在电视打开时播放 当我的Android设备通过HDMI连接到电视时,如何在我的Android应用程序中检测电视的电源状态 电视和Android设备都支持HDMI-CEC。所讨论的设备是ODROID C2。我在KODI Android应用程序上看到过这一功能,该应用程序具有在HDMI-CEC状态关闭时暂停视频的功能

我正在构建一个Android媒体播放器应用程序,我打算在通过HDMI电缆连接的同时在电视上播放媒体(视频、图片等)

我想让media player应用程序在电视的电源状态为关闭时暂停,并在电视打开时播放

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

电视和Android设备都支持HDMI-CEC。所讨论的设备是ODROID C2。我在KODI Android应用程序上看到过这一功能,该应用程序具有在HDMI-CEC状态关闭时暂停视频的功能,我也希望在我的应用程序中实现这一功能

感谢您的帮助。提前谢谢

编辑:进度如下

我尝试从该文件中读取HDMI连接的状态
/sys/devices/virtual/switch/HDMI/state
。但是,无论连接的屏幕/TV的电源状态是打开还是关闭,此文件都会保存
int
1

第二次进度更新


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

在一些电视中,您需要以500毫秒的间隔监控(sys/class/amhdmitx/amhdmitx0/hpd_state)文件夹的更改。因为它将在1秒内从1变为0,再从0变为1。

您可以通过注册操作\u HDMI\u音频\u插头来监听HDMI状态的变化(0表示已拔出,1表示已插入)。当电视关闭、切换到任何其他显示媒体或HDMI被移除时,它会报告状态0。要了解其技术性,您可以查看热插拔检测在HDMI中是如何工作的。总的来说,你的应用程序可以随时监控显示器当前是否可以播放你的内容。我自己在一个解决方案中实现了这一点(在X96 mini android box和amazon fire stick上),在这个解决方案中,我需要确保内容实际上正在播放,因为它包括付费内容。此外,我还附上了示例代码文件。 注意:此解决方案仅在android设备为HDMI源而非接收器时有效

这里还有文档链接-


你查过了吗?很可能你要找的帽子可以在这里找到。@Mohammadtabara谢谢你的评论。是的。问题是用Android盒子把HDMI CEC信号发送到电视(很像这里的努力):请考虑在你的电脑中增加更多的信息。answer@Inder在三星电视中,如果您通过ADB外壳使用linux“cat”命令读取上述路径,它将始终返回1(TV_STATE_ON)。尝试以**1到1.5秒**的固定间隔连续读取该特定路径。打开电视时,它将变为0(电视状态为关闭),持续时间仅为1.5秒。之后,它将再次显示1(电视状态)。这看起来像是来自三星电视方面的一个bug(尽管不确定)。
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);

}