当前位置: 首页 > 知识库问答 >
问题:

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

颛孙沈义
2023-03-14

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

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

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

电视和Android设备都支持HDMI-CEC。该设备是一个ODROID C2。我已经在KODI Android应用程序上看到了这个功能,它有一个功能,当HDMI-CEC状态关闭时,可以暂停视频,我也希望在我的应用程序中实现这个功能。

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

编辑:下面的进度

我尝试从文件/sys/devices/virtual/switch/HDMI/state中读取HDMI连接的状态。但是,无论连接的屏幕/电视的电源状态是开还是关,此文件都保留int1

第二次进度更新

我还在努力。不会放弃,一旦我完成了我一定会把答案贴在这里。

共有1个答案

郭乐湛
2023-03-14

您可以通过注册Action_HDMI_Audio_Plug来监听HDMI状态的更改(0表示已拔出,1表示已插入)。当电视关闭、切换到任何其他显示介质或HDMI被移除时,它报告状态为0。要了解其技术性,您可以查看热插拔检测是如何在HDMI中工作的。总的来说,你的应用程序可以随时监控显示器当前是否可以播放你的内容。我自己在一个解决方案(在X96迷你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);

}
 类似资料:
  • 监视电源状态 进程: 主进程​ 该模块在主进程 app 模块的 ready 事件前使用. 1 const electron = require('electron') 2 const {app} = electron 3 ​ 4 app.on('ready', () => { 5 electron.powerMonitor.on('suspend', () => { 6 console.log('

  • 我目前正在开发一款android wear应用程序,它有两种模式:连接(与手机配对)和断开连接。我看了这个帖子(如何检测android设备是否与android wear watch配对)。我添加了侦听器来检测何时找到节点。 存在以下情况:-如果启动移动应用程序,wear应用程序将检测到节点并进入连接模式。-如果移动应用程序被杀死,它会在被销毁之前向手表发送一条消息,手表会进入断开连接模式如果蓝牙连

  • 问题内容: 众所周知,Android设备具有将手机变成接入点/热点的功能。 是否可以通过编程方式获取连接到手机wifi接入点的设备数量? 问题答案: 您可以在接入点上计数已连接的设备,并且可以在android的以下链接上获取硬件mac地址:http : //www.flattermann.net/2011/02/android-howto-find-the-hardware-mac-address

  • 我正在尝试检测已经连接到android的usb设备。我知道有动作可以检测USB何时连接或断开。但是我真的不知道如何在将usb设备连接到android后检查设备。另外,我发现每个USB设备都有它的设备类别代码,但是我怎么知道连接的是哪种设备呢?例如,我需要检测usb鼠标和键盘;我如何区分它们?

  • 我试图建立一个应用程序,也可以通过按下设备电源按钮两次打开。我已经按照这个问题的答案来构建我的应用程序。但是应用关闭时后台服务不工作。尽管它在应用程序运行时似乎工作正常。以下是服务LockS的代码ervice.java 应用程序ScreenReceiver的BroadcastReceiver类。JAVA 主要活动。JAVA 最后是一份清单。xml文件在这里。我应该怎么做才能正常运行应用程序?