使Android Python服务以挂起状态运行

以下是使用android-scripting编写的Python脚本:

import android, time

droid = android.Android()
interval = 1 # every 1 minute

while True:
    # define your own vibrate pattern here
    droid.vibrate(200)
    time.sleep(0.3)
    droid.vibrate(300)

    time.sleep(60*interval)

它基本上每分钟振动一次(如激励)。 但是,当手机屏幕被屏蔽掉时,我感觉不到任何振动。 也许Android会冻结脚本(从而导致while循环)? 请注意,我确实将此脚本作为服务运行(长按,然后单击“作为服务启动”)。

有没有办法让这个脚本一直工作,无论电话挂起状态如何?

更新1 :我偶尔会听到振动,而不是每分钟都听到振动,而是像随机每5-10分钟一样。

更新2 :如果我正常运行脚本(而不是服务),则会发生此问题。 看起来像“time.sleep”在指定的时间没有睡觉。


脚本环境绝对是二等公民。 你想要什么叫做AlarmManager,使用ELAPSED_REALTIME。 如果这不适用于脚本环境,那么您就陷入困境。

至少目前,脚本环境并不打算完全取代开发工具包环境,您可以在其中创建完整的应用程序。 它的目的是让你做一些简单的脚本任务,代价是不能做更复杂的事情。 抱歉。


我面临同样的问题。

当android设备处于“锁定”模式时,time.sleep()不可靠:

这里有一些我在SL4A release4 + pythonForAndroid_r5 + android 2.3.3上尝试过的三星Galaxy S

  • 在droid.wakeLockAcquirePartial()和droid.wakeLockRelease()中包装一个time.sleep(interval)循环。 这将防止CPU放慢速度。
  • 使用eventWaitFor(eventName,timeOutInMilliSeconds)调用:
  • droid.eventWaitFor(“ThisEventCannotHappen”,interval * 60000)

  • threading.Timer()对象似乎也按预期工作,在我的设备上进行了一些测试(需要确认...)
  • 我不确定,但最好记住这些技巧可能会在真正的“锁定/睡眠”模式下消耗更多的能量,因此会降低设备的运行时间。

    更新:对于长时间间隔,eventWaitFor()不可靠。 下面是一段显示Timer()如何工作的片段:

    import android
    import threading
    import logging
    
    
    def doStuff():
        logging.info("testTimer.py: Stuff DONE")
        droid.notify('testTimer.py',"doStuff() has been called")
        droid.vibrate(500)
    
    def createLog(path):
        logging.basicConfig(filename=path,
                            level=logging.INFO,
                            format='%(asctime)s %(message)s')
    
    DELAY=600
    
    droid=android.Android()
    logpath="/mnt/sdcard/testTimer.py.log"
    createLog(logpath)
    timer=threading.Timer(DELAY,doStuff)
    logging.info("timer starting now")
    timer.start()
    logging.info("doStuff() will be called by timer...Delay=%d" % DELAY)
    

    在不支持AlertManager的情况下,这不太可能在ASE中起作用。 你最好的选择是提交功能请求并等待。 或者,如果您感到雄心勃勃,请自行扩展ASE并提交补丁!

    链接地址: http://www.djcxy.com/p/16195.html

    上一篇: Making an android Python service to run in suspend state

    下一篇: Kivy for Android apps