触发 Roku 后退动作
Trigger Roku back action
有没有办法通过 BrightScript 触发 roku 返回操作?
我想从导航堆栈中弹出当前屏幕,并显示上一个屏幕。
我需要这个有几个原因:
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"
由于 Thread Rendezvous,我不建议在任务线程中处理导航,而且您也可以只拥有一个 roSGScreen 和一个场景,并让 Groups/Rectangles 作为您的应用程序 "screens".这将是一种更高效的解决方案。
但是无论如何,回到你的问题,你可以通过使用 External Control API.
ecpRequest = CreateObject("roUrlTransfer")
url = "http://" + roku_ip + ":8060/keypress/back"
ecpRequest.setURL(url)
ecpRequest.postFromString("")
您可以从roDeviceInfo
获取roku ip地址。
有没有办法通过 BrightScript 触发 roku 返回操作?
我想从导航堆栈中弹出当前屏幕,并显示上一个屏幕。
我需要这个有几个原因:
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"
由于 Thread Rendezvous,我不建议在任务线程中处理导航,而且您也可以只拥有一个 roSGScreen 和一个场景,并让 Groups/Rectangles 作为您的应用程序 "screens".这将是一种更高效的解决方案。
但是无论如何,回到你的问题,你可以通过使用 External Control API.
ecpRequest = CreateObject("roUrlTransfer")
url = "http://" + roku_ip + ":8060/keypress/back"
ecpRequest.setURL(url)
ecpRequest.postFromString("")
您可以从roDeviceInfo
获取roku ip地址。