Триггер обратного действия Roku

Есть ли способ вызвать действие roku back через BrightScript?

Я хочу удалить текущий экран из стека навигации и показать предыдущий экран.

Мне это нужно по нескольким причинам:

1.) На экране появится кнопка возврата, к которой пользователь может перейти и нажать. Нажатие этой кнопки должно вызвать обратное действие, подобное нажатию кнопки возврата на пульте дистанционного управления. (Представьте браузер window.history.back ())

2.) Я хочу вызвать это обратное действие при вызове определенных событий обратного вызова.

В настоящее время я использую следующую задачу для навигации:

function init()
    ? "[NavigationTask] init()"
    m.top.functionName = "gotoScreen"
end function

sub gotoScreen()
    if m.top.sceneName <> invalid then
        handleNav(m.top.sceneName)
    else
        print "[NavigationTask] sceneName not specified"
    end if
end sub

sub handleNav(sceneName as String)
    print "[NavigationTask] handleNav"

    screen = CreateObject("roSGScreen")
    m.port = createObject("roMessagePort")
    screen.SetMessagePort(m.port)

    if screen <> invalid
        scene = screen.CreateScene(sceneName)
        screen.Show()

        while(true)
            msg = wait(0, m.port)
            msgType = type(msg)
            print "[NavigationTask] msg : "; msgType" scene="sceneName 
            if msgType = "roSGScreenEvent"
                if msg.isScreenClosed() then return
            end if
        end while
    else 
        print "[NavigationTask] Invalid roSGScreen"
    end if   
end sub

Задача называется так:

   m.NavigationTask   = createObject("roSGNode","NavigationTask")
   m.NavigationTask.sceneName = videoScreen()
   m.NavigationTask.control  ="RUN"

person Fabii    schedule 01.06.2018    source источник
comment
Почему бы не использовать что-то похожее на функцию переключения для видимости? Планируете ли вы использовать одну и ту же задачу и contentNode?   -  person norcal johnny    schedule 15.06.2018


Ответы (1)


Я бы не рекомендовал обрабатывать навигацию в потоке задач из-за Thread Rendezvous, а также у вас может быть только один roSGScreen и одна сцена, а группы / прямоугольники будут действовать как «экраны» вашего приложения. Это было бы более производительное решение.

Но в любом случае, возвращаясь к вашему вопросу, вы можете программно имитировать обратный пресс, используя API внешнего управления.

ecpRequest = CreateObject("roUrlTransfer")
url = "http://" + roku_ip + ":8060/keypress/back"
ecpRequest.setURL(url)
ecpRequest.postFromString("")

Вы можете получить IP-адрес roku в roDeviceInfo.

person Alejandro Cotilla    schedule 10.06.2018
comment
Если не ошибаюсь, вместо ip-адреса можно просто заменить его на localhost: http://localhost:8060/keypress/back - person mco; 08.09.2018