Запуск кода при первом запуске приложения для Android - PullRequest
3 голосов
/ 15 августа 2010

У меня есть новое приложение для Android с уведомлением о землетрясении, которое находится в его первоначальной версии. У меня сейчас проблема. У моего приложения есть служба, работающая в фоновом режиме, она планирует себя запускать каждый X период. Чтобы составить расписание, нужно запустить хотя бы один раз. В настоящее время это происходит при загрузке телефона. Очевидно, я не хочу, чтобы пользователь перезагружал свой телефон после установки приложения.

Кроме того, я не хочу, чтобы пользовательский интерфейс приложения вызывал его при каждом запуске. Потому что это явно испортило бы пользовательское планирование. Вместо этого мне нужно знать, что либо когда мое приложение пользовательского интерфейса запускается впервые на телефоне, оно должно иметь возможность запускать службу, чтобы оно могло планировать себя и продолжать работу, как ожидается в будущем.

Альтернативный способ, которым я мог бы решить это, состоит в том, что, если я знаю список существующих аварийных сигналов для пробуждения службы, то я бы знал, запущено ли уже приложение или нет.

Если вы хотите увидеть исходный код приложения или запустить двоичный файл; Пожалуйста, посмотрите на следующий github url

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

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 15 августа 2010

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

Прежде всего, я думаю, что вы можете настроить BroadcastReceiver, чтобы уведомлять вас об установке пакета для начальной настройки.

Чтобы определить, подали ли вы уже сигнал тревоги, попробуйте получить PendingIntent для сигнала тревоги с помощью FLAG_NO_CREATE. Если вы получаете ноль, вам нужно настроить будильник, иначе это, вероятно, хорошо.

1 голос
/ 15 августа 2010

Обратите внимание, что вызовы startService() не являются вложенными: независимо от того, сколько раз вы вызываете startService(), если эта служба еще не запущена, она будет создана и запущена (создавая для нее процесс, если необходимо); если он работает, то он продолжает работать.

Каждый вызов этого метода приведет к соответствующему вызову метода onStart (Intent, int) целевой службы с намерением, указанным здесь.

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

И, наконец, если вам нужна служба, которая работает постоянно, вы должны запустить ее в классе Application, независимо от того, сколько раз. Вы делаете разницу в onStart методе службы.

...