React Native-Android TV-DPad功能

时间:2018-08-17 05:26:36

标签: android reactjs react-native google-play-console

我已经为Android电视向Google Play商店发布了一个react native应用。

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

  

缺少DPad功能   您的应用需要用户互动   菜单或应用导航。请确保所有菜单和应用   使用DPad可以完全导航。请参考我们的DPAD   控制和硬件声明文档。

如何为react-native android应用启用d-pad导航?

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

3 个答案:

答案 0 :(得分:3)

最后,我已经修复了反应本机android电视应用程序的d-pad导航和标题问题。

问题是:(其中包括甚至不是问题的一部分)

1。没有完整尺寸的应用横幅

修复: create a folder called drawable下的"your-app/android/app/src/main/res",添加一个png文件dimensions 320px x 180px and 320 dpi,最重要的部分是您发布APK的 within image, there should be no other text then application name

2。不支持的硬件使用

修复: :我在发布问题之前已解决了此问题,但是如果您遇到问题,则

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

3。缺少DPad功能(问题中出现了实际问题)

修复: :我在屏幕上使用InputText。好吧,在android / android tv的react-native version 0.56下, InputText cannot be focused by d-pad (方向键)。 I stopped using TextInput ,它固定了触摸板导航。它也可以在android模拟器中进行测试。

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

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

要将主题升级为适用于android电视的leanback:

  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>
    

答案 1 :(得分:1)

您的清单是否声明了正确的使用功能?主要是第一个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应用程序以响应本机,但是androidtv的焦点管理存在一些错误,即如果您单击了正确的按钮,但是该项目垂直位于上方,而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"] />

答案 2 :(得分:0)

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

就我而言,缺少Dpad功能的问题与使用TextInput组件有关,AndroidTV尚不完全支持TextInput组件(无法使用DPad进行聚焦)

我通过使用黑客使TextInput可聚焦来修复它。即,将其包装在一个touchable中(TouchableWithoutFeedback,TouchableOpacity和TouchableHighlight均可用于此目的),并使用onFocus处理程序来管理对嵌套TextInput组件的关注。

遵循以下原则:

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

在解决了TextInput焦点问题后,该应用已获批准用于AndroidTV