React Native - Android TV - Функциональность DPad

Я опубликовал собственное приложение реагирования в магазине Google Play для Android TV.

Что касается телевидения, я получил уведомление о:

Missing DPad functionality Your app requires user interaction for menus or app navigation. Please make sure that all menus and app navigation are fully functional using a DPad. Please refer to our DPAD Control and Hardware Declaration documentation.

Как включить навигацию с помощью d-pad для приложений Android, поддерживающих реакцию?

Если вам нужна дополнительная информация, просто дайте мне знать.

У меня такая же проблема. Вы получили ответ. Поделитесь пожалуйста решением.

Sanjay Kakadiya 21.08.2018 06:29

@SanjayKakadiya все та же проблема. Сегодня вечером попробую несколько вещей. Дам вам знать, если у меня получится.

Priyank Thakkar 21.08.2018 08:13

@SanjayKakadiya проверь мой ответ

Priyank Thakkar 04.09.2018 15:41
4
3
1 743
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

В вашем манифесте указаны правильные возможности использования? в основном первый otne touchScreen требовал false

<uses-feature android:name = "android.hardware.touchscreen"
        android:required = "false"/>
<uses-feature android:name = "android.hardware.faketouch"
        android:required = "false"/>
<uses-feature android:name = "android.hardware.telephony"
        android:required = "false"/>
<uses-feature android:name = "android.hardware.camera"
        android:required = "false"/>
<uses-feature android:name = "android.hardware.nfc"
        android:required = "false"/>
<uses-feature android:name = "android.hardware.location.gps"
        android:required = "false"/>
<uses-feature android:name = "android.hardware.microphone"
        android:required = "false"/>
<uses-feature android:name = "android.hardware.sensor"
        android:required = "false"/>

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

редактировать ------------ вы пробовали реализовать эти конфигурации?

<uses-configuration
  android:reqFiveWayNav=["true" | "false"]
  android:reqHardKeyboard=["true" | "false"]
  android:reqKeyboardType=["undefined" | "nokeys" | "qwerty" | "twelvekey"]
  android:reqNavigation=["undefined" | "nonav" | "dpad" | "trackball" | "wheel"]
  android:reqTouchScreen=["undefined" | "notouch" | "stylus" | "finger"] />

Да, я удалил все эти разрешения, пометив как ложные. Тем не менее, ошибка сохраняется.

Priyank Thakkar 21.08.2018 01:35
Ответ принят как подходящий

Наконец, я исправил проблему с навигацией с помощью d-pad и баннером для Android-приложения для Android.

Проблемы были: (включая вопросы, которые даже не были частью вопроса)

1. Нет полноразмерного баннера приложения.

Исправить:create a folder called drawable под "your-app/android/app/src/main/res", добавьте файл png (dimensions 320px x 180px and 320 dpi), и самая важная часть - within image, there should be no other text then application name, с которой вы опубликовали APK.

2. Неподдерживаемое оборудование.

Исправить: Я исправил эту проблему до публикации вопроса, но если вы столкнулись с проблемой,

refer the answer by **@reidisaki** on this question.

3. Отсутствие функциональности DPad (актуальная проблема, поднятая в вопросе)

Исправить: Я использовал InputText на своем экране. Ну и под react-native version 0.56 для android / android tv, InputText cannot be focused by d-pad (стрелка). I stopped using TextInput и исправил навигацию с помощью d-pad. Он также доступен в симуляторе Android для тестирования приложения.

Чтобы мое приложение было более совместимо с ТВ, в AndroidManifest.xml я обновил свою программу запуска действий до:

<intent-filter>
    <action android:name = "android.intent.action.MAIN" />
    <category android:name = "android.intent.category.LEANBACK_LAUNCHER"/>
</intent-filter>

Чтобы обновить тему до уровня Leanback для Android TV:

  1. Я added leanback library в "app-name / android / app / build.gradle" в разделе зависимостей:

    dependencies {
    ....
    compile "com.android.support:leanback-v17:${rootProject.ext.supportLibVersion}"
    }
    
  2. В AndroidManifest.xml я сменил тему на @style/Theme.Leanback

    <application
      android:name = ".MainApplication"
      android:label = "@string/app_name"
      android:icon = "@mipmap/ic_launcher"
      android:banner = "@drawable/banner"
      android:allowBackup = "true"
      android:theme = "@style/Theme.Leanback">
      ....
    </application>
    

Приянк, как вы сказали в пункте 3, вы перестали использовать TextInput. Что вы используете для получения данных от пользователя на телевизионных устройствах.

Hemant Kaushik 11.09.2018 08:58

Я использовал компонент <Text />. Создал свою собственную экранную клавиатуру с помощью кнопок, но да, мои требования к вводу данных были очень ограничены. Так что у меня это сработало. Взял переменную в состоянии и сделал привязку с <Text />

Priyank Thakkar 11.09.2018 09:06

Для TextInput вы можете разместить прозрачный компонент TouchableOpacity. Получив фокус, принудительно установите фокус на InputText.

Talha Arshad 10.03.2020 08:18

Я тоже столкнулся с этой проблемой (и мне удалось исправить)

В моем случае проблема Отсутствует функциональность Dpad была связана с использованием компонента TextInput, который еще не полностью поддерживается на AndroidTV (не может быть сфокусирован с помощью DPad)

Я исправил это с помощью хака, чтобы сделать TextInput фокусируемым. А именно, обернул его в touchable (для этой цели подойдут TouchableWithoutFeedback, TouchableOpacity и TouchableHighlight) и использовал обработчик onFocus для управления фокусом на вложенном компоненте TextInput.

Что-то в этом роде:

<TouchableOpacity 
  onFocus = {() => {
    textInput && textInput.current.focus(); 
  }}
  >
  <TextInput ref = {textInput} />
</TouchableOpacity>

После устранения проблемы с фокусом TextInput приложение было одобрено для AndroidTV.

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