GOOGLE ADS

вторник, 26 апреля 2022 г.

Шаги для программного преобразования с Android на приемник miracast

Я пытаюсь написать приложение, которое начнет транслировать экран с телефона Android на телевизор через miracast. Я использую ключ HDMI, так как рассматриваемый телевизор изначально не поддерживает miracast. Я пытался использовать код здесь, но ему нужен идентификатор приложения, который я получил, выполнив следующие действия. Мой вопрос в том, что в инструкциях указано, что мне нужно зарегистрировать ключ miracast, чтобы он мог общаться с неопубликованным приложением «отладка». Однако упоминаются только устройства Google Cast, и это не тот же протокол, что и miracast. Нужно ли мне еще регистрировать ключ?

Есть ли более простой способ программной трансляции на устройство через miracast? Требование — отсутствие взаимодействия с пользователем, поэтому я не могу просто отобразить кнопку приведения.

Я использую Android 5.1, если это актуально.

РЕДАКТИРОВАТЬ: После дальнейших исследований я понял, что Google Cast использует протокол, совершенно отличный от Miracast, и поэтому все разговоры о регистрации ключа не имеют значения. Для использования Miracast на Android регистрация не требуется. Проблема в том, что API скрыт, подробности см. В моем ответе ниже.


Решение проблемы

Так что это возможно, но только на пользовательских версиях Android из-за проблем с разрешениями.

Что вам нужно использовать

Скрытая часть WifiDisplay API делает все это возможным. Этот файл содержит примеры использования API для преобразования отображения. Похоже, что Google в какой-то момент выпустит его публично, хотя, насколько я вижу, он все еще скрыт в последнем мастере API 23.

Как получить доступ к скрытому API

Чтобы использовать скрытые API, это руководство ( зеркало здесь ) является хорошим введением. Однако если вы используете API 22+, это руководство не будет работать, так как формат android.jar изменился, а class.dex был разделен на несколько файлов. Так что этот совет более точен в этом случае. Учтите, что приписку о тоже framework-classes2.dex нужно сделать; это необязательно.

Последняя версия dex2jarинструмента не может превратить файл.dex из API 22 в банку. Решение упоминается автором здесь. Я решил исправить инструмент вместо изменения dex, так как это не сработало для меня. Просто измените строку, упомянутую автором, с выбрасывания RuntimeException на:

return TypeClass.INT;

Как получить разрешение на использование скрытого API

Как только все это будет сделано, следующим шагом будет предоставление вашему приложению CONFIGURE_WIFI_DISPLAYразрешения. К сожалению, как вы можете видеть здесь, он имеет защиту на уровне системы. Это означает, что ваше приложение должно быть подписано тем же ключом, что и система, чтобы использовать это разрешение. Поэтому, если у вас нет закрытого ключа Google, вы не сможете запустить свое приложение на обычных телефонах Android. Мое решение состояло в том, чтобы создать пользовательскую версию CyanogenMod (используя это руководство) с изменением разрешения с «системного» на «нормальное». Это избавляет от необходимости возиться с подписанием чего-либо. Я также сделал то же самое для CONTROL_WIFI_DISPLAYразрешения. Хотя я не совсем уверен, что это необходимо, это не повредит. Оба эти разрешения находятся в frameworks/base/core/res/AndroidManifest.xml. Измените строки 2161-2169 с:

<permission android:name="android.permission.CONFIGURE_WIFI_DISPLAY"
android:protectionLevel="signature" />
<permission android:name="android.permission.CONTROL_WIFI_DISPLAY"
android:protectionLevel="signature" />

К:

<permission android:name="android.permission.CONFIGURE_WIFI_DISPLAY"
android:protectionLevel="normal" />
<permission android:name="android.permission.CONTROL_WIFI_DISPLAY"
android:protectionLevel="normal" />

Затем соберите CyanogenMod как обычно. Я могу подтвердить, что это работает, но это ограничивает работу вашего приложения на устройствах, на которых установлена ​​эта пользовательская версия CyanogenMod. Кроме того, установка CyanogenMod на телефон Android, как правило, аннулирует гарантию.

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...