Обнаружение изменений в состоянии питания телевизора, подключенного к устройству Android через HDMI

Я создаю приложение для мультимедийного проигрывателя Android, которое я собираюсь использовать для воспроизведения мультимедиа (видео, изображений и т. Д.) На телевизоре при подключении через кабель HDMI.

Я хочу, чтобы приложение мультимедийного проигрывателя приостанавливалось, когда питание телевизора выключено, и хочу, чтобы оно воспроизводилось при включении телевизора.

Как определить состояние питания телевизора в приложении Android, когда мое устройство Android подключено к телевизору через HDMI?

И телевизор, и устройство Android поддерживают HDMI-CEC. Данное устройство является ODROID C2. Я видел эту функциональность в приложении Android KODI, в котором есть функция приостановки видео, когда состояние HDMI-CEC выключено, я также собираюсь реализовать это в своем приложении.

Любая помощь приветствуется. Заранее спасибо!

РЕДАКТИРОВАТЬ: прогресс ниже

Я пытался прочитать состояние подключения HDMI из этого файла /sys/devices/virtual/switch/hdmi/state, Тем не менее, этот файл содержит int1 независимо от того, включено или выключено состояние питания подключенного экрана / телевизора.

Обновление 2-го прогресса

Я все еще работаю над этим. Не сдамся, и как только я закончу, я обязательно выложу ответ здесь.

1 ответ

Вы можете прослушивать изменения статуса HDMI (0 для неподключенного и 1 для подключенного), зарегистрировавшись в ACTION_HDMI_AUDIO_PLUG. Он сообщает со статусом 0, когда телевизор выключен, переключается на любой другой носитель дисплея или HDMI удален. Чтобы ознакомиться с его техническими характеристиками, вы можете проверить, как работает обнаружение "горячей" замены в HDMI. В целом, ваше приложение может постоянно отслеживать, может ли дисплей в настоящее время воспроизводить ваш контент или нет. Я сам реализовал это в решении (на мини-андроид коробке X96 и флешке amazon), где мне нужно было убедиться, что контент действительно воспроизводится, потому что он включает платный контент. Кроме того, я приложил файл примера кода. Примечание: это решение будет работать только тогда, когда Android-устройство является источником HDMI, а не тонет!

Вот ссылка на документацию тоже - https://developer.android.com/reference/android/media/AudioManager

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);

}

В некоторых телевизорах необходимо отслеживать эту папку (sys / class / amhdmitx / amhdmitx0 / hpd_state) на предмет изменения интервала 500 мс. потому что он изменится от 1 до 0 и снова от 0 до 1 в течение 1 секунды.

Другие вопросы по тегам