使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.eventWaitFor(“ThisEventCannotHappen”,interval * 60000)
我不确定,但最好记住这些技巧可能会在真正的“锁定/睡眠”模式下消耗更多的能量,因此会降低设备的运行时间。
更新:对于长时间间隔,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