Я использую приложение Tasker для Android, и у меня не получается заставить работать цикл. Я надеялся, что кто-то сможет дать некоторое представление, поскольку цикл - это довольно простая концепция программирования. Я предполагаю, что мне просто не хватает чего-то особенного в синтаксисе Tasker.

Что я пытаюсь сделать:

Я пытаюсь написать сценарий, который воспроизводит звук и 3 раза зацикливается. Я могу заставить его выполнить один раз, но он не будет зацикливаться.

Что я пробовал

До сих пор я пробовал несколько вариантов как для циклов for, так и для циклов if, но, похоже, я не могу заставить часть цикла работать. Основная идея, которую я пробую:

  1. Создайте счетчик и установите его на 0
  2. Откройте оператор if (я также пробовал его как цикл for) с условием, что счетчик меньше 3.
  3. Внутри петли воспроизведите звук и выполните вибрирующее действие.
  4. Увеличьте счетчик на 1.
  5. Снова перейдите к началу цикла.

Как я это пытаюсь

Как я уже упоминал, я пробовал это несколькими способами, но это самая последняя попытка:

1.  Variable Set
%Counter, 0

2.  If
%Counter < 3

    3. Notify Sound
    Sound

    4. Vibrate
    500

    5. Variable Add
    %Counter, 1

    6. Goto
    Action Number, 2

7.  End If

Когда я вставляю туда Flash, я вижу, что счетчик увеличивается, но он игнорирует часть Goto. Любые мысли или идеи будут оценены.

Обновление и решение

Основываясь на предложении Энтони Аткинсона, я добавил ожидание после запуска звуковых / вибрирующих фрагментов, и это заставило цикл работать. После некоторых дополнительных исследований выяснилось, что мне нужно добавить уведомление об отмене ближе к концу цикла, чтобы прояснить ситуацию. Я вижу, что значок удаляется из области уведомлений, когда это происходит.

Похоже, Tasker видел что-то уже запущенное и пропустил это, когда это зациклилось. Если у кого-то есть лучшее объяснение этого, я был бы признателен за это.

Если у кого-то еще возникла такая же проблема, как и у меня, обновленный (и рабочий) скрипт выглядит следующим образом:

1.  Variable Set
%Counter, 0

2.  If
%Counter < 3

    3. Notify Sound
    Sound

    4. Vibrate
    500

    5. Variable Add
    %Counter, 1

    6. Wait
    0, 3, 0 ,0

    7.  Notify Cancel

    8. Goto
    Action Number, 2

9.  End If
0
Kalabakk 4 Июл 2013 в 04:59

1 ответ

Лучший ответ

Я только начал работать с Tasker, но какое-то время был разработчиком Android. В большинстве случаев эти действия являются асинхронными, и на самом деле вы можете выполнять все их в одно и то же время , не давая первому раунду достаточно времени для завершения. Другими словами, этот процесс мог бы работать, если бы он был блокирующим, но он может быть асинхронным. Может быть, попробовать добавить время сна после каждого раунда? Скажем, 750 мс или что-то в этом роде, и посмотрим, что произойдет?

0
Anthony Atkinson 4 Июл 2013 в 05:05
Спасибо за предложение. Я попытался добавить 5-секундное ожидание между приращением счетчика и Goto, и это частично помогло. Теперь он повторяется три раза, но повторяется только вибрация. Звук воспроизводится только в первый раз. Я попробую добавить паузы в нескольких других местах и ​​посмотрю, поможет ли это.
 – 
Kalabakk
4 Июл 2013 в 06:04
Как долго длится звук уведомления?
 – 
Anthony Atkinson
4 Июл 2013 в 17:19
Это меньше секунды, поэтому пауза в 5 секунд не продлится. Я добавил паузу еще в нескольких местах, но звук по-прежнему воспроизводится только один раз.
 – 
Kalabakk
4 Июл 2013 в 18:49
Я нашел кое-что, что работает, хотя и немного необычно. Если я добавлю Notify Cancel в конце цикла, непосредственно перед Goto, это поможет. Лучше всего, насколько я могу судить, похоже, что Tasker думает, что уведомление все еще работает / активно, или что-то в этом роде, поэтому он не запускает его снова. Спасибо за вашу помощь, я отмечу ваш ответ как ответ, чтобы отдать вам должное, поскольку вы помогли мне заставить работать часть цикла. Я также обновлю свой пост, чтобы разместить там решение.
 – 
Kalabakk
4 Июл 2013 в 19:12