Как передать данные активности, запущенной службой

Мне нужно разработать приложение, которое выдает всплывающее сообщение в определенное время, установленное пользователем.

Я буду использовать Android AlarmManager, который запускает службу, и эта служба запускает активность, содержащую всплывающий интерфейс, с помощью кнопки OK.

Я хочу передать данные этой активности, как это можно сделать (иначе мне придется запрашивать базу данных)?

  • Как передать данные из активности в службу при установке времени запуска с помощью AlarmManager?
  • Как позже передать эти данные активности, запущенной службой?

Кроме того, если служба запускает действие в моем приложении (не основное действие), а функции обработчика базы данных находятся в отдельном классе, доступна ли база данных?


person SpeedBirdNine    schedule 04.11.2011    source источник


Ответы (1)


Когда вы передаете объект PendingIntent методу AlarmManager.set, вы можете поместить любые дополнительные элементы в объект Intent, завернутый в ожидающее намерение. Например:

Intent intent = new Intent(getApplicationContext(), YourService.class);
intent.putExtra("someKey", someData);
intent.putExtra("anotherKey", anotherData);
PendingIntent pi = PendingIntent.getService(getApplicationContext(), REQUEST_CODE, intent, FLAGS);
alarmManager.set....

И затем, когда служба запускается, вы получаете тот же объект намерения:

public void onStartCommand(Intent data, int startId, int flags) {
    int data1 = data.getExtra("someKey");
}

И вы можете сделать то же самое при запуске активности из вашего сервиса:

Intent activityIntent = new Intent(getApplicationContext(), YourActivity.class);
intent.putExtra("key", data1);

На самом деле, если вы не делаете ничего особенного в своем сервисе, кроме запуска действия, почему бы вам просто не установить намерение для действия в своем будильнике?

person Jong    schedule 04.11.2011
comment
Спасибо, я не знал, что будильник также может запускать активность! - person SpeedBirdNine; 04.11.2011
comment
PendingIntent может делать все, что может сделать обычное намерение, я почти уверен в этом. - person Jong; 05.11.2011