Android - отключить HDMI

Один из моих проектов Android должен время от времени переключаться между 2 входами HDMI, возможно, раз в минуту. Один вход HDMI поступает с выхода HDMI устройства Android и один из внешнего, неконтролируемого источника.

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

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

UPDATE

Я хочу начать раздачу, поэтому я немного уточню свой запрос: у меня есть телевизор с поддержкой HDMI с 2 портами. Мое устройство Android подключено к порту 1, другое устройство подключено к порту 2. Телевизор автоматически переключается на следующий порт HDMI с сигналом.

Например, если у HDMI1 и HDMI2 есть сигналы, я поместил свой телевизор на HDMI1. Когда первое устройство "закрывает" свой выход HDMI, телевизор переключится на HDMI2. Через некоторое время (5 минут) первые устройства "снова открывают" HDMI1 (это означает, что первое устройство включает выход HDMI), а второе устройство "закрывает" свой выход HDMI, чтобы телевизор переключился обратно на HDMI1. Таким образом, я могу сделать смесь видео.

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

Единственное, что достаточно близко к тому, что мне нужно, это этот SO сообщение, но в моем случае это действительно не помогает.

Ответ 1

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

Вот краткий пример того, как это происходит, чтобы изменить дисплей /HDMI:

    private final DisplayManager.DisplayListener mDisplayListener =
            new DisplayManager.DisplayListener() {
        @Override
        public void onDisplayAdded(int displayId) {
            Log.d(TAG, "Display #" + displayId + " added.");
            mDisplayListAdapter.updateContents();
        }

        @Override
        public void onDisplayChanged(int displayId) {
            Log.d(TAG, "Display #" + displayId + " changed.");
            mDisplayListAdapter.updateContents();
        }

        @Override
        public void onDisplayRemoved(int displayId) {
            Log.d(TAG, "Display #" + displayId + " removed.");
            mDisplayListAdapter.updateContents();
        }
    };

И вот как подключить все ваши устройства HDMI/дисплея:

    protected void onResume() {
        // Be sure to call the super class.
        super.onResume();

        // Update our list of displays on resume.
        mDisplayListAdapter.updateContents();

        // Restore presentations from before the activity was paused.
        final int numDisplays = mDisplayListAdapter.getCount();
        for (int i = 0; i < numDisplays; i++) {
            final Display display = mDisplayListAdapter.getItem(i);
            final PresentationContents contents =
                    mSavedPresentationContents.get(display.getDisplayId());
            if (contents != null) {
                showPresentation(display, contents);
            }
        }
        mSavedPresentationContents.clear();

        // Register to receive events from the display manager.
        mDisplayManager.registerDisplayListener(mDisplayListener, null);
    }

В unregister вы используете:

//unregisterDisplayListener(DisplayManager.DisplayListener);
@Override
protected void onPause() {
    // Be sure to call the super class.
    super.onPause();

    // Unregister from the display manager.
    mDisplayManager.unregisterDisplayListener(mDisplayListener);

    // Dismiss all of our presentations but remember their contents.
    Log.d(TAG, "Activity is being paused.  Dismissing all active presentation.");
    for (int i = 0; i < mActivePresentations.size(); i++) {
        DemoPresentation presentation = mActivePresentations.valueAt(i);
        int displayId = mActivePresentations.keyAt(i);
        mSavedPresentationContents.put(displayId, presentation.mContents);
        presentation.dismiss();
    }
    mActivePresentations.clear();
}

О выходе "invalidate" HDMI, если это произойдет, просто перерисуйте его. Это должно решить любой invalidate", если это произойдет.

Возможно, вам будет полезно проверить дальнейшую документацию.