我正在建立一个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
。
第二次进度更新
我还在努力。不会放弃,一旦我完成了,我肯定会在这里发布答案。
答案 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);
}