Android上的Kivy和OSC

1 投票
1 回答
1404 浏览
提问于 2025-04-18 10:02

我在kivy上做了一个简单的OSC测试,但在我的安卓手机上运行时遇到了一些问题。为了更好地理解Kivy和OSC是怎么回事,我做了一个小测试,目的是展示这个应用和另一台电脑之间的通信。通常来说,这台电脑就像一个服务器。

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.gridlayout import *
from kivy.uix.button import Button
from kivy.clock import Clock
from kivy.lib.osc import oscAPI

class CButton(Button):
    def __init__(self, **kwargs):
        kwargs['text'] = kwargs.get('text', 'empty')
        super(CButton, self).__init__(**kwargs)

class OscWidget(GridLayout):
    def __init__(self, **kwargs):
        super(OscWidget, self).__init__(**kwargs)

    def callback(self, instance, *args):
        self.oscbutton.text = instance[2]
        oscAPI.sendMsg('/current/reply', dataArray=['answer'], ipAddr='192.168.1.101', port=8889)

class OscButtonApp(App):
    def buttpress(self, *args):
        oscAPI.sendMsg('/current/reply', dataArray=['call'], ipAddr='192.168.1.101', port=8889)

    def build(self):
        btnapp = OscWidget()
        oscAPI.init()
        oscid = oscAPI.listen(port=8889)
        osc.bind(oscid, btnapp.callback, '/test/reply')
        Clock.schedule_interval(lambda *x: osc.readQueue(oscid), 0)
        return btnapp


if __name__ == '__main__':
    OscButtonApp().run()

在我的电脑上测试时,它可以双向通信,也就是说我可以从另一个终端发送消息,而Kivy应用会做出反应:

oscAPI.sendMsg('/test/reply', dataArray=['change'], ipAddr='localhost', port=8889)

发送这个消息后,Kivy会改变按钮上的标签。另外,在另一个终端上设置一个监听端口(并在脚本中编辑输出端口)也能让我看到从Kivy发送的消息。不过,当我在手机上尝试这个简单的应用时,似乎只能发送消息,而无法接收消息。我到底哪里做错了呢?

谢谢

1 个回答

5

默认情况下,oscApi.listen 只会在 127.0.0.1 上监听。这意味着它只会接收来自本机(你自己的电脑)的消息。如果你想接收来自任何地方的消息,就需要将监听地址改为 0.0.0.0

oscid = oscAPI.listen(ipAddr='0.0.0.0', port=8889)

撰写回答