Roku Раздвижная панель

Я использую раздвижную панель в своем проекте. Предположим, у меня есть панель A (слева) и B(справа) в наборе панелей. Теперь я перемещаюсь к панели C из B, и теперь у моего набора панелей есть панели B и C. Точно так же я продолжаю углубляться до уровня, так что теперь у набора панелей есть панель E(слева) и F(справа).

Теперь я хочу, чтобы моя панель стала скользить и показывать начальную панель A и B непосредственно после того, как я выполню какое-либо действие (скажем, нажав кнопку, присутствующую на панели F).

Как этого достичь? Это похоже на поведение на домашнем экране Roku. Например: если у меня установлен стиль подписи Roku и я нажимаю кнопку "Домой", экран возвращается к списку домашней страницы и переключается в режим "Домой" независимо от того, сколько панелей было между ними. Я попытался использовать свойство панели goBackCount, но безрезультатно. Пожалуйста помоги.

2 ответа

Я заставил его работать, используя Roku Tasks и ECP(API внешнего управления). Сначала я создал задачу для выполнения вызовов ECP, чтобы нажать кнопку дистанционного управления. RemoteControlTask.xml:

<component name = "RemoteControlTask" extends = "Task" >

<interface>
    <field id = "url" type = "string" />
    <field id = "content" type = "node" />
</interface>
<script type = "text/brightscript" >

<![CDATA[

    sub init()
        m.deviceIP = GetDeviceIP()
        m.top.functionName = "SlideLeft"
    end sub

    function PressKey(key as String)
        request = CreateObject("roUrlTransfer")
        request.SetRequest("POST")
        port = CreateObject("roMessagePort")
        request.SetMessagePort(port)
        url = "http://" + m.deviceIP + ":8060/keypress/" + key
        request.SetUrl(url)
        if(request.AsyncGetToString())
            while(true)
                msg = wait(0, port)
                if(type(msg) = "roUrlEvent")
                    code = msg.GetResponseCode()
                    if(code = 200)                   
                        return true
                    else
                        print code
                    end if
                else if(event = invalid)
                    request.AsyncCancel()
                end if
            end while
        end if
        return invalid
    end function

    function SlideLeft()
        PressKey("left")
    end function

    function GetDeviceIP() as String
        device = CreateObject("roDeviceInfo")
        deviceIP = device.GetIPAddrs()["eth1"]
        return deviceIP
    end function
]]>


</script>


</component>

Затем в сценарии, который вызовет прокрутку назад, добавьте следующее в метод init():

m.remoteControlTask = CreateObject("roSGNode", "RemoteControlTask")

И добавьте подпрограмму:

sub RunRemoteControlTask()
    m.remoteControlTask.control = "RUN"
end sub

Наконец, вызовите RunRemoteControlTask, когда кнопка нажата:

RunRemoteControlTask()

После установки значения goBackCount больше 1 попробуйте вызвать функцию onKeyEvent() и передать аргументы "ключ" и "нажатие", например: onKeyEvent("left", true), Если я правильно понял документы Roku, goBackCount работает только после и если нажата "левая" дистанционная клавиша.

Другие вопросы по тегам