2012-02-27 6 views
0

Пара вопросов по регистрации и запуску Тревоги при активации триггера.Android Тревога и сервисный триггер

  1. Если будильник установлен на пару минут вперед текущего времени, а затем, если телефон сделан выключатель, будет сигнал тревоги на следующий переключатель телефона на после запланированного времени прошло?

  2. Как отменить/обновить ожидающие намерения в службе? Как получить код запроса в startCommand() метод обслуживания?

  3. Будет ли создано несколько экземпляров службы, если будильник срабатывает каждые 10 секунд?

+0

«отменить/обновить в ожидании намерения в службе» - в чем причина? – Olegas

ответ

1
  1. Если «выключить» означает полную мощность вниз, а не просто «один раз кратковременно нажать кнопку питания, чтобы включить экран,» ответ «нет»

  2. Я думаю, что вы не можете получить код запроса вообще. Как указано в документации по getService, поле requestCode «в настоящее время не используется». Вы должны передать все свои данные с помощью Intent (третий аргумент getService).

  3. Не будет. См http://developer.android.com/reference/android/content/Context.html#startService(android.content.Intent)

Каждый вызов этого метода приведет к соответствующему вызову onStartCommand целевого сервиса (Intent, Int, Int) метод

+0

Спасибо Olegas за ваши данные – Ravibhushan

1
  1. Хранить время из тревогу в SharedPreferences. Затем зарегистрируйте приемник для android.intent.action.BOOT_COMPLETED (не забудьте добавить разрешение для android.permission.RECEIVE_BOOT_COMPLETED к вашему манифесту), а затем в ресивере, который будет выполняться при запуске, вы можете увидеть, есть ли будильник в SharedPreferences, и если это так, вы можете сбросить его, если он еще не прошел, или решить, что делать, если время уже прошло.

  2. См problem with cancel the alarm manager pending intent

  3. No. OnCreate сервиса будет называться только один раз. Каждый раз он будет вызывать его onStart и onStartCommand.

0
  1. Из моего собственного приложения, которое я разрабатываю, если будильник установлен в течение времени, когда телефон выключен, он был выполнен на следующий телефон на/ботинке. То есть без приемника для присутствия BOOT_COMPLETED. Я не уверен, что это ожидаемое поведение или нет, или же оно согласовано по телефонным вариантам.

    Я считаю, что если вы хотите, чтобы ваш будильник выполнял намерение в указанное время, вам нужно использовать getBroadcast PendingIntent с WakeLock, так как другие варианты PendingIntent не гарантируют, что телефон будет оставаться достаточно долго, прежде чем он выключится вниз опять. Это информация из другого сообщения здесь CommonsWare, которое я попытаюсь найти и связать.

  2. Я считаю, что вы можете удалить pendingintent отправляется менеджеру сигнализации, используя, например, функцию, как:

    public void unregisterEvent(PendingIntent sender) { ((AlarmManager) this.getSystemService(Context.ALARM_SERVICE)).cancel(sender); }

    где PendingIntent был создан именно в качестве первоначальной цели вы пытаетесь Удалить. Вы можете обновить его, предоставляя правильный идентификатор вместе с новым PendingIntent при повторном вызове AlarmManager:

    AlarmManager am = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE); am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender);

    Это то, что я использую для создания/отстроить PendingIntent:

    PendingIntent.getService(this, uniqueIndexToIntent, theIntentItself, PendingIntent.FLAG_UPDATE_CURRENT);

    флаг обновит намерение, если оно уже существует, или создаст новое в противном случае.

  3. Я не думаю, что так будет. Тем не менее, я бы рекомендовал, чтобы ваш Сервисный вызов stopSelf(), как только он закончил выполнение своей работы, так что использование батареи минимизируется. Не нужно, чтобы он работал, если ему нечего делать!

Смежные вопросы