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 работает только после и если нажата "левая" дистанционная клавиша.