【问题标题】:React Native - Android TV - DPad FunctionalityReact Native - Android TV - DPad 功能
【发布时间】:2019-01-24 02:42:37
【问题描述】:

我已经向 google play store 发布了一个 react native 应用程序,用于 android tv。

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

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

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

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

【问题讨论】:

  • 我也遇到了同样的问题。你得到答案了吗。请分享解决方案。
  • @SanjayKakadiya 仍然是同样的问题。今晚将尝试一些事情。如果我成功了,会通知你的。
  • @SanjayKakadiya 检查我的答案

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


【解决方案1】:

最后,我已经解决了 react-native android tv 应用程序的 d-pad 导航和横幅问题。

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

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 模拟器中使用,以测试应用程序。

为了使我的应用程序更符合 TV 标准,我在 AndroidManifest.xml 中将我的活动启动器升级为:

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

将主题升级到安卓电视的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>
    

【讨论】:

  • Priyank,正如您在第 3 点中所说,您停止使用 TextInput。您用来从电视设备上的用户那里获取一些数据的工具。
  • 我使用了 组件。使用按钮创建了我自己的屏幕键盘,但是我对数据输入的要求非常有限。所以它对我有用。在 state 中获取一个变量并使用 进行绑定
  • 对于TextInput,可以放置一个透明的TouchableOpacity组件。获得焦点后,将焦点强制到 InputText。
【解决方案2】:

您的清单是否声明了正确的使用特性?主要是第一个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 应用程序以及 react native,但 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"] />

【讨论】:

  • 是的,我已经通过标记为 false 删除了所有这些权限。然而错误仍然存​​在。
【解决方案3】:

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

在我的情况下,缺少 Dpad 功能问题与使用 AndroidTV 尚不完全支持的 TextInput 组件有关(无法使用 DPad 聚焦)

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

类似的东西:

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

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

【讨论】:

  • 这似乎工作
猜你喜欢
  • 2022-08-20
  • 2018-07-20
  • 2022-07-31
  • 2018-09-17
  • 1970-01-01
  • 1970-01-01
  • 2021-01-27
  • 1970-01-01
  • 2016-11-08
相关资源
最近更新 更多