该代码适用于 Mac,但在 Android 设备上,服务和主应用程序似乎不会相互交换(响应)消息。因为如果我不在它们之间发送消息,只是在某个时间间隔内启动服务和推送通知,它就可以工作。下面是我的代码。
主要.py:
from oscpy.client import OSCClient
from oscpy.server import OSCThreadServer
SERVICE_NAME = '{packagename}.Service{servicename}'.format(
packagename='clientsandorders.com.clientsandorders',
servicename='Taskreminder'
)
class MainApp(MDApp):
def build(self):
kv = Builder.load_file("main.kv")
self.start_service()
self.server = server = OSCThreadServer()
server.listen(
address=b'localhost',
port=3002,
default=True,
)
server.bind(b'/ping_response', self.ping_response)
self.client = OSCClient(address=b'localhost', port=3000)
return kv
def ping_response(self):
self.client.send_message(b'/push_up', [])
这是服务代码:
from time import sleep
from oscpy.server import OSCThreadServer
from oscpy.client import OSCClient
from plyer import notification
from plyer.utils import platform
from jnius import autoclass
CLIENT = OSCClient(address='localhost', port=3002)
def push_up():
if platform == 'android':
notification.notify(title='Test', message='This is a test message')
else:
print('Service works')
def ping_activity():
CLIENT.send_message(b'/ping_response', [])
if __name__ == '__main__':
SERVER = OSCThreadServer()
SERVER.listen(address='localhost', port=3000, default=True)
SERVER.bind(b'/push_up', push_up)
PythonService = autoclass('org.kivy.android.PythonService')
PythonService.mService.setAutoRestartService(True)
while True:
sleep(10)
ping_activity()
预期的行为是服务在特定时间间隔 ping 主应用程序,然后获得响应(未来包含一些数据)并使用 plyer 推送通知。
logcat 没有显示错误。
提前谢谢了!