3

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

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

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

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

任何帮助表示赞赏。提前致谢!

编辑:下面的进展

我尝试从这个文件中读取 HDMI 连接的状态/sys/devices/virtual/switch/hdmi/stateint 1但是,无论连接的屏幕/电视的电源状态是打开还是关闭,此文件都将保留。

第二次进度更新

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

4

2 回答 2

2

您可以通过注册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);

}
于 2018-12-07T19:49:22.780 回答
1

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

于 2018-08-14T07:17:45.463 回答