Создание уведомлений по времени (например, для событий) в Android

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

Для этой цели необходимо использовать классы AlarmManager, NotificationManager и Notification.Builder, верно?

Так как же мне создать уведомление по времени заранее? Мой код (пока что) выглядит так:

Добавьте это под в AndroidManifest для регистрации приемника вещания:

<receiver android:name="AlarmNotificationReceiver"></receiver>

Создайте новый файл класса, который обрабатывает сигнал тревоги, который он получает:

public class AlarmNotificationReceiver extends BroadcastReceiver {

    public void onReceive(Context context, Intent intent) {
        Bundle extras = intent.getExtras();
        if (extras != null) {
            String additionalData = extras.getString("displayText");
            // show the notification now
            NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
            Notification mNotification = new Notification(R.drawable.ic_launcher, context.getString(R.string.app_name), System.currentTimeMillis());
            PendingIntent pi = PendingIntent.getActivity(context, 0, new Intent(context, MainActivity.class), 0); // open MainActivity if the user selects this notification
            mNotification.setLatestEventInfo(context, context.getString(R.string.app_name), additionalData, pi);
            mNotification.flags |= Notification.FLAG_AUTO_CANCEL | Notification.DEFAULT_SOUND;
            mNotificationManager.notify(1, mNotification);
        }
    }

}

Используйте этот код (например, в MainActivity), чтобы установить сигнал тревоги на 3 секунды от этого момента:

    Intent i = new Intent(this, AlarmNotificationReceiver.class);
    i.putExtra("displayText", "sample text");
    PendingIntent pi = PendingIntent.getBroadcast(this.getApplicationContext(), 234324246, i, 0);
    AlarmManager mAlarm = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
    mAlarm.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+3*1000, pi);

Что мне нужно изменить, чтобы это работало? Спасибо!

Две проблемы:

  1. Текст уведомления не меняется, когда я меняю его в коде. Он меняется только когда я меняю requestCode в PendingIntent.getBroadcast(...). Что означает этот код запроса? Может ли он быть случайным значением или 0?
  2. После перезагрузки телефона "запланированное" уведомление или сигнал тревоги исчезли. Но теперь я увидел, что это нормальное поведение, верно? Как я могу обойти это?
5
задан caw 8 January 2012 в 23:47
поделиться