Для некоторых приложений для 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);
Что мне нужно изменить, чтобы это работало? Спасибо!
Две проблемы: