如何在Kivy应用程序(Android)中获取PARTIAL_WAKE_LOCK?

时间:2014-08-19 09:17:03

标签: android python kivy wakelock pyjnius

我正在尝试为我的kivy应用获取PARTIAL_WAKE_LOCK。 基本上它是一个计时器应用程序,当屏幕关闭时,计时器应继续在后台运行。 一切都工作正常,除了唤醒锁。 这是我在python中实现它的方式:

from jnius import autoclass

PythonActivity = autoclass('org.renpy.android.PythonActivity')
activity = PythonActivity.mActivity

Context = autoclass('android.content.Context')
PowerManager = autoclass('android.os.PowerManager')

pm = activity.getSystemService(Context.POWER_SERVICE)
wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, 'TAG')

wl.acquire()

该应用程序运行良好,但当屏幕关闭时它崩溃。应用

def on_pause(self):
    return True
def on_resume(self):
    pass

方法对我没用,因为它会在屏幕关闭的位置停止计时器。

在我的buildozer.spec文件中:

android.permissions = WAKE_LOCK

当我设置:

android.wakelock = True

我只收到screen_bright_wakelock,但我需要partial_wakelock

1 个答案:

答案 0 :(得分:2)

我猜你在这里误解了WAKE_LOCK。默认情况下,如果您不接触应用程序,系统会将手机检测为空闲,然后将其锁定。

如果用户关闭屏幕,切换到另一个应用程序等,WAKE_LOCK将无法执行任何操作。因为在那时,你的应用程序必须在后台,并且在睡眠中#34;模式。

您需要的是服务。当应用程序处于后台,屏幕锁定或未锁定时,服务可以继续运行。而且您需要在您的应用和服务之间建立通信链接(内部OSC可以正常,可以在互联网上搜索示例)。

或者,试着看看Android API中的AlarmManager / Alarm是否适合您(从未测试过)。