当手机被锁定时,使用部分唤醒和服务不会使应用程序运行



我在我的kivy应用程序中使用部分唤醒锁和服务,以便它可以在我锁定屏幕时运行。当开关打开时,我的服务会让手机每隔一秒震动一次,而只有当开关打开时,应用程序才会尝试获得部分唤醒锁。然而,这似乎不起作用,因为当我锁定手机时,手机每隔一秒就会停止震动。这是我的main.py.

__version__ = "1.0"
import kivy
import plyer
kivy.require('1.0.9')
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.button import Button
from kivy.uix.switch import Switch
from kivy.utils import platform
from kivy.clock import Clock
from kivy.properties import BooleanProperty
from kivy.lib import osc
from kivy.event import EventDispatcher
from jnius import autoclass
activityport = 3001
serviceport = 3000

class ActiveSwitch(Switch):
    pass

class VibrateButton(Button):
    def vibrate(self):
            plyer.vibrator.vibrate(3)
class Vibrate(Widget):
    activate = BooleanProperty(True)
    def on_activate(self, instance, value):
            osc.sendMsg('~/kivyinstall/sahil/reply/step3_active/service', [value, ], port=serviceport)

class ActiveApp(App):
    def build(self):
            if platform == 'android':
                    from android import AndroidService
                    service = AndroidService()
                    service.start()
                    self.service = service
            osc.init()
            oscid = osc.listen(ipAddr='127.0.0.1', port=activityport)
            osc.bind(oscid, self.message_callback, '~/kivyinstall/sahil/reply/step3_active')
            Clock.schedule_interval(lambda *x: osc.readQueue(oscid), 0)
            PythonActivity = autoclass('org.renpy.android.PythonActivity')
            activity = PythonActivity.mActivity
            Context = autoclass('android.content.Context')
            PowerManager = autoclass('android.os.PowerManager')
            power = activity.getSystemService(Context.POWER_SERVICE)
            global wakelock
            wakelock = power.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, 'TAG')
            return Vibrate()
    def message_callback(self, message, *args):
            global switch
            switch = message[2]
            self.function()
    def function(self):
            if switch == 0:
                    wakelock.acquire()
            if switch == 1:
                    wakelock.release()
    def on_pause(self):
            return True
    def on_resume(self):
            pass

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

我试图使用部分唤醒锁,以便在手机被锁定时保持手机的CPU运行。我猜手机在锁定时停止振动的原因是CPU在锁定时关闭,手机使用CPU来振动。此外,当我解锁手机并重新打开应用程序时,开关仍然处于与我离开时相同的位置,因为我将on_pause定义放在代码中,但手机不再振动。这让我相信,出于某种原因,代码没有获得部分唤醒锁,当手机被锁定时CPU关闭。这个main.py和service/main.py能够成功地通信交换机的位置。然而,当这个main.py获得消息时,wakelock.acquire()似乎并没有保持手机的CPU处于开启状态。

手机锁定时需要CPU保持震动吗?如果是这样,那么有没有另一种方法来保持CPU和手机振动后,我锁定它?我用的是jnius和wakelock吗?获取/释放正确吗?

如果手机不需要CPU在锁定时保持振动,那么还有什么原因导致手机在锁定时停止振动,我需要什么才能在锁定后保持手机振动?

谢谢你的帮助。

您是否确保在buildozer.spec中设置了WAKE_LOCK权限:

# (list) Permissions
android.permissions = WAKE_LOCK

最新更新