下面是我用android脚本编写的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循环)?请注意,我确实是以服务的形式运行这个脚本的(长点击并单击'Start as service')。
有没有一种方法可以让这个脚本一直工作,而不管手机挂起状态?
更新1:我确实偶尔听到震动,而不是每分钟。而是随机的每5-10分钟一次。
更新2:如果我正常运行脚本(而不是作为服务),就会出现这个问题。似乎"time.sleep“没有在指定的时间内睡觉。
发布于 2010-02-05 15:41:56
脚本环境绝对是二等公民。您想要的是使用AlarmManager的ELAPSED_REALTIME。如果这在脚本环境中是不可用的,那么您将陷入困境。
至少目前,脚本环境并不打算完全替代开发工具包环境,在开发工具包环境中可以创建完整的应用程序。它的目的是允许您执行一些简单的脚本任务,而代价是不能做更复杂的事情。抱歉的。
发布于 2011-11-13 00:33:56
我也面临着同样的问题。
当安卓设备处于“锁定”模式时,time.sleep()是不可靠的:
以下是我在三星星系S上的SL4A release4 + pythonForAndroid_r5 +Android2.3.3上尝试过的一些东西
droid.eventWaitFor("ThisEventCannotHappen",间隔*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)发布于 2010-02-04 07:33:38
如果没有对AlertManager的支持,这在ASE中是不可能奏效的。您最好的选择是提交一个功能请求并等待它。或者,如果你觉得雄心勃勃,扩展ASE自己并提交补丁!
https://stackoverflow.com/questions/2076381
复制相似问题