Как да предавате данни към дейност, стартирана от услуга

Трябва да разработя приложение, което извежда изскачащо съобщение в определено време, зададено от потребителя.

Ще използвам 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