我正在构建一个 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/