Вот является мой сценарий 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 замораживает сценарий (и следовательно цикл с условием продолжения)? Обратите внимание, что я действительно запускаю этот скрипт как услуга (длинное касание, и нажмите 'Start as service').
Существует ли способ заставить этот сценарий работать все время независимо от телефона, приостанавливают состояние?
Обновление 1: Я слышу вибрацию иногда, не каждую минуту.. а скорее как каждые 5-10 минут случайным образом.
Обновление 2: Это проблемы происходят, если я обычно запускаю скрипт (не как услуга). Кажется, что "time.sleep" не спит в течение требуемого времени.
Возможное решение: Используйте некоторое программное обеспечение планировщика и регулярно начните свой скрипт. Таким образом, вам не нужно позвонить в Time.sleep ().
Может быть, скрипты не являются лучшим решением для таких периодических задач. Вы не столкнетесь с этой проблемой, если вы напишите простое приложение Java.
Я не знаю много о привязке Python, поэтому я собираюсь ответить в качестве общей проблемы Android. См. Управление питанием .
partial_wake_lock
Звучит интересно: «Rake Lock, который гарантирует, что CPU запущен. Экран может быть не включен».
Изучение пример блокировки разбойника
Все звонки по управлению питанием следуют то же Базовый формат:
- приобретайте ручку в PowerManager служба.
- Создайте разбойник и Укажите флаги управления питанием для Экран, время ожидания и т. Д.
- приобретают блокировку Wake.
- Выполнение операции (воспроизведение mp3, Откройте HTML-страницу и т. Д.).
- Отпустите блокировку Wake. Фрагмент ниже иллюстрирует этот процесс.
PowerManager pm = (PowerManager)mContext.getSystemService(
Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(
PowerManager.SCREEN_DIM_WAKE_LOCK
| PowerManager.ON_AFTER_RELEASE,
TAG);
wl.acquire();
// ...
wl.release();
Ваша проблема не в том, чтобы перейти, что уровень ошибок требует специального лечения, это не похоже на обычную переменную среды. Единственным тестом, который можно выполнить с уровнем ошибки, является проверка того, больше или равно значение.
поэтому вы должны проверить значения уровня ошибок от самого высокого до самого низкого, потому что если уровень ошибок 1
тогда , если уровень ошибки 1
будет истинным, но , если уровень ошибки 0
, также будет истинным
setlocal
set /A sample =1
:first
type C:\test.txt | find "inserted"
if errorlevel 1 goto exam
if errorlevel 0 goto test
:test
echo "testloop" >> C:\testloop.txt
set /A sample = %sample% + 1
if %sample% LEQ 4 goto first
:exam
echo "exam loop" >> C:\examloop.txt
endlocal
, если включены расширения команд, и отсутствует переменная среды ERRORLEVEL (без учета регистра). Тогда теоретически можно использовать% ERRORLEVEL% как обычную переменную среды. Так что это также должно работать
setlocal EnableExtensions
set /A sample =1
:first
type C:\test.txt | find "inserted"
if %errorlevel% EQU 1 goto exam
if %errorlevel% EQU 0 goto test
:test
echo "testloop" >> C:\testloop.txt
set /A sample = %sample% + 1
if %sample% LEQ 4 goto first
:exam
echo "exam loop" >> C:\examloop.txt
-121--4349463- >>> s = "0200A8C0"
>>> bytes = ["".join(x) for x in zip(*[iter(s)]*2)]
>>> bytes
['02', '00', 'A8', 'C0']
>>> bytes = [int(x, 16) for x in bytes]
>>> bytes
[2, 0, 168, 192]
>>> print ".".join(str(x) for x in reversed(bytes))
192.168.0.2
Это коротко и ясно; завершите его в функции с проверкой ошибок в соответствии с вашими потребностями.
Удобные функции группирования:
def group(iterable, n=2, missing=None, longest=True):
"""Group from a single iterable into groups of n.
Derived from http://bugs.python.org/issue1643
"""
if n < 1:
raise ValueError("invalid n")
args = (iter(iterable),) * n
if longest:
return itertools.izip_longest(*args, fillvalue=missing)
else:
return itertools.izip(*args)
def group_some(iterable, n=2):
"""Group from a single iterable into groups of at most n."""
if n < 1:
raise ValueError("invalid n")
iterable = iter(iterable)
while True:
L = list(itertools.islice(iterable, n))
if L:
yield L
else:
break
-121--3434571- Маловероятно, что это будет работать в ASE без поддержки AlertManager. Лучше всего подать запрос на функцию и дождаться его. Или, если вы чувствуете себя амбициозным, расширьте ASE самостоятельно и отправьте патч!
Среда сценариев определенно является гражданином второго сорта. То, что вам нужно, называется AlarmManager, использующий ELAPSED_REALTIME. Если это недоступно для среды сценариев, вы застряли.
Среда сценариев, по крайней мере, в настоящее время, не предназначена для полной замены среды набора средств разработки, в которой вы можете создавать полноценные приложения. Она предназначена для того, чтобы вы могли выполнять некоторые простые задачи, связанные со сценариями, за счет отсутствия возможности выполнять более сложные задачи. Извините.