React Native - поддержка Android TV для Android - PullRequest
0 голосов
/ 13 сентября 2018

Я бы хотел создать приложение для Android TV, используя React-Native. Я выполнил рекомендацию по этому документу: Здание для телевизионных устройств .

После обновления файла AndroidManifest.xml я запускаю приложение с помощью командной строки - response-native run android. Приложение работает без проблем; Тем не менее, я попытался использовать опцию Directional-pad из эмулятора андроида TV (720p) API 23, и это не сработало. Я ожидал отловить событие, указанное в приведенном ниже коде, и записать в консоль соответствующий тест для каждого события. С другой стороны, даже компонент, который использовался для текста, не выделялся и не фокусировался, когда я пытался перемещаться с использованием Directional-pad.

Я обращаюсь к сообществу, чтобы узнать, была ли у кого-то эта проблема в прошлом, и какова была ваша проблема и что вы сделали для ее решения? Кроме того, поскольку я перечисляю шаги ниже, не могли бы вы сообщить мне, если я что-то упустил?

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

  1. реактивный род init Dpad
  2. CD Dpad
  3. Обновление кода на основе - Построение для Телевизионные устройства
  4. Запустите Android TV (720p) API 23 эмулятор.
  5. реакция-нативный run-android

ПРИЛОЖЕНИЕ: Android TV (720p) API 23

Вот код:

import React, { Component } from 'react';
import { Text, View } from 'react-native';
import Channel from '../channel/channel.component';
import styles from './presentation.component.styles';

var TVEventHandler = require('TVEventHandler');

export default class Grid extends Component {
    constructor(props){
      super(props);
      this.state = {
         command: 'undefined'
      }
    }

    setcomand( command) {
      this.setState( () => { return { command: command }; });
    }

    _tvEventHandler: null;
    _enableTVEventHandler() {
        this._tvEventHandler = new TVEventHandler();
        this._tvEventHandler.enable(this, function(cmp, evt) {
          if (evt && evt.eventType === 'right') {
            setcomand('Press Right!');
          } else if(evt && evt.eventType === 'up') {
            setcomand('Press Up!');
          } else if(evt && evt.eventType === 'left') {
            setcomand('Press Left!');
          } else if(evt && evt.eventType === 'down') {
            setcomand('Press Down!');
          } 
        });
    }  

    _disableTVEventHandler() {
        if (this._tvEventHandler) {
          this._tvEventHandler.disable();
          delete this._tvEventHandler;
        }
    }

    componentDidMount() {
        this._enableTVEventHandler();
        console.warn("component did mount");
      }

      componentWillUnmount() {
        this._disableTVEventHandler();
        console.warn("component Will Unmount");
      }

    render() {
        return (
        <View style={styles.container}>
            <Text>{this.state.command}</Text>
            <Channel name="Globo" description="Its brazilian TV channles for news"/>
            <Channel name="TVI" description="Its Portuguese TV channles for news"/>
            <Channel name="TVI" description="Its Portuguese TV channles for news"/>
        </View>
        );
  }
}

Ответы [ 6 ]

0 голосов
/ 13 мая 2019

Наличие console.log внутри обратного вызова TVEventHandler, похоже, нарушает его при работе без удаленного отладчика js.

0 голосов
/ 26 сентября 2018

Да.Я хотел бы увидеть ваше решение, потому что я могу перемещаться с помощью D-pad, но я не мог видеть, к какому элементу я перемещаюсь.Мне нужно выделить или показать фокус на элементе, к которому я перемещаюсь.

0 голосов
/ 18 сентября 2018

У меня действительно хорошие новости о поддержке событий стрелок D-Pad (вверх, вниз, влево, вправо).
Выяснилось, что один из авторов Android TV для активных людей - человек из моей страны. Я связываюсь с ним и рассказываю об этой проблеме. Он проверил это, и на самом деле, для этого отсутствует код.
Он сделал запрос на поддержку, чтобы поддержать это в реагировать на родной. Это должно быть исправлено в одном из следующих выпусков новой версии (он сказал, что это может занять около месяца).
Временно я знаю, как справиться с этим (добавить код и перекомпилировать Java-файлы), я уже проверил его, и он отлично работает. Все события сейчас работают. Если вам действительно нужна эта поддержка сейчас и вы не хотите ждать, я могу поделиться, как это сделать.

Приветствия

0 голосов
/ 17 сентября 2018

Дэйв -

Я решил разработать приложение для Android TV с использованием React Native, потому что видео, которым поделилась команда реагирования - [https://www.youtube.com/watch?v=EzIQErHhY20] и страница учебника [https://facebook.github.io/react-native/docs/building-for-apple-tv]. Я думаю, это все, что у нас есть; кроме этого мы не получим дальнейшую поддержку.

ХОРОШИЕ НОВОСТИ - Я начал новый проект с нуля, используя реагирует нативная версия 0.57.0 , версия узла V10.7.not и ** npm версия 4.6.1 . Кроме того, для навигации я использую реагирующую навигацию версии 2. Мне удалось увидеть, что мой эмулятор Directional-pad работал, однако я не смог увидеть фокус на элементе, по которому я перемещаюсь (слева, справа, вниз, вверх).

Я буду работать над тем, чтобы решить проблему с фокусом. Давайте не переставать делиться нашим прогрессом и не стесняйтесь протягивать руку

Спасибо,

Джустимиано Алвес

0 голосов
/ 14 сентября 2018

Я тоже борюсь с этой проблемой уже месяц. Все еще не могу найти помощь / решение.
Я тестировал это на Android Studio Emulator, а также на нескольких реальных коробках Android TV с настоящими удаленными d-площадками.
Я до сих пор не могу понять, является ли это проблемой React Native (ошибка) или устройства Android TV не генерируют ответ (keyCode) на направленные стрелки D-Pad.
Я могу воспроизвести такие события, как: фокус, размытие, выберите, fastForward, playPause, перемотка назад, но нет способа получить такие события, как, например, "оставил". Я ищу много на Google и других сайтах, вы первый, кто борется с той же проблемой.
Я чувствую, что никто не заботится об Android TV в React-Native.
Вы также можете прокомментировать мою ветку Issue на странице React-Native github.
https://github.com/facebook/react-native/issues/20924
Надеюсь, мы скоро это выясним.
Приветствия

0 голосов
/ 14 сентября 2018

Мне не удалось проверить, что Directional-pad работает с реагировать-нативный Это было моей целью этой демонстрации. Я учусь создавать андроидное ТВ с использованием реагирующей нативной и до сих пор Directional-pad, это большая проблема, учитывая, что пользователь телевизора не будет использовать сенсорный экран.

Однако я не смог выяснить, почему мое приложение не реагирует на клавиатуру Directional-pad (влево, вправо, вверх и вниз). Там не было ошибки кода.

Вы пытались использовать Directional-pad для навигации по своему приложению реакции-нативу?

Спасибо,

...