繁体   English   中英

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

[英]Using partial wakelock and service does not make app run when phone is locked

我在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和akelock.acquire / release?

如果手机在锁定时不需要CPU保持振动,那又是什么导致手机在锁定时停止振动,又该如何在锁定后使手机保持振动呢?

谢谢您的帮助。

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

# (list) Permissions
android.permissions = WAKE_LOCK

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM