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

标签 android hdmi-cec

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

我想让媒体播放器应用程序在电视电源状态为关闭时暂停,并希望它在电视打开时播放。

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

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

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

编辑:下面的进度

我尝试从这个文件 /sys/devices/virtual/switch/hdmi/state 中读取 HDMI 连接的状态。但是,无论连接的屏幕/电视的电源状态是打开还是关闭,此文件都保存 int 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);

}

关于android - 检测通过 HDMI 连接到 Android 设备的电视的电源状态变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49406586/

相关文章:

android - Twitter API postman : Code 32: Could not authenticate you

linux - Coral 开发板 hdmi arc 输入/输出错误

android - 用于关机的 HDMI CEC 命令在 Android 上不起作用

android - Android 上的 HDMI CEC

Android数据绑定(bind)问题: Missing return statement in generated code while using with a custom view?

java - 如何在点击事件android中保存资源ID

android - 带有振动的不良加速度计数据

android - 如何使用 sysfs 将 HDMI-CEC 命令从 Amlogic 905x 板发送到电视

android - 音频焦点丢失 - 谁拿走了它?