Обнаружение изменений в состоянии питания телевизора, подключенного к устройству Android через HDMI
Я создаю приложение для мультимедийного проигрывателя Android, которое я собираюсь использовать для воспроизведения мультимедиа (видео, изображений и т. Д.) На телевизоре при подключении через кабель HDMI.
Я хочу, чтобы приложение мультимедийного проигрывателя приостанавливалось, когда питание телевизора выключено, и хочу, чтобы оно воспроизводилось при включении телевизора.
Как определить состояние питания телевизора в приложении Android, когда мое устройство Android подключено к телевизору через HDMI?
И телевизор, и устройство Android поддерживают HDMI-CEC. Данное устройство является ODROID C2. Я видел эту функциональность в приложении Android KODI, в котором есть функция приостановки видео, когда состояние HDMI-CEC выключено, я также собираюсь реализовать это в своем приложении.
Любая помощь приветствуется. Заранее спасибо!
РЕДАКТИРОВАТЬ: прогресс ниже
Я пытался прочитать состояние подключения HDMI из этого файла /sys/devices/virtual/switch/hdmi/state
, Тем не менее, этот файл содержит int
1
независимо от того, включено или выключено состояние питания подключенного экрана / телевизора.
Обновление 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 секунды.