React Native - Android TV - DPad 功能

React Native - Android TV - DPad Functionality

我已经为 android 电视的 google play store 发布了一个 React Native 应用程序。

对于电视,我收到了以下通知:

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.

我们如何为反应本机 android 应用启用方向键导航?

如果您需要更多信息,请告诉我。

您的清单是否声明了正确的使用特性?主要是第一个 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"/>

我也想为 React Native 发布一个 android 电视应用程序,但是 androidtv 的焦点管理有错误,即如果你点击了右键,但该项目在垂直上方右边 android 电视什么都不做。

编辑------------ 您尝试过实施这些配置吗?

<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"] />

最后,我解决了反应本机 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 电视,InputText cannot be focused by d-pad(方向键)。 I stopped using TextInput 并修复了方向键导航。它也可以在 android 模拟器中使用,以测试应用程序。

为了使我的应用程序更兼容电视,在 AndroidManifest.xml 中,我将 activity 启动器升级为:

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

要将 android 电视的主题升级为 Leanback:

  1. I added leanback library to "app-name/android/app/build.gradle" under dependencies section:

    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>
    

我也遇到过这个问题(并设法解决)

在我的案例中缺少 Dpad 功能 问题与使用 TextInput 组件有关,AndroidTV 尚未完全支持该组件(无法使用 DPad 聚焦)

我通过使用 hack 使 TextInput 可聚焦来修复它。也就是说,将其包装在一个可触摸的对象中(TouchableWithoutFeedback、TouchableOpacity 和 TouchableHighlight 都可以用于此目的)并使用 onFocus 处理程序来管理嵌套 TextInput 组件上的焦点。

大致如下:

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

修复 TextInput 焦点问题后,该应用已获准用于 AndroidTV