Здравствуйте, у меня есть повторяющееся уведомление.
Я бы хотел, чтобы отображаемая в уведомлении информация о новом элементе из моей локальной базы данных при каждом его вызове.
Например, В моей базе данных будет таблица с 3 элементами, содержащая уникальную строку заголовков и сообщений для каждого индекса. Каждый раз, когда вызывается уведомление, вызывается новый индекс базы данных, чтобы выдвинуть новый элемент.
SQL Данные:
Table: Table Name
Element 1: String 1, String One
Element 2: String 2, String Two
Element 3: String 3, String Three
Android уведомление отправлено:
First notification: Title: 1, Message: One
Second notification: Title: 2, Message: Two
Third notification: Title: 3, Message: Three
Как запустить кроссплатформенный метод Xamarin, который просматривает мою базу данных для следующего элемента каждый раз, когда вызывается уведомление android? Как отслеживать, какое будет следующее уведомление в фоновом режиме?
Вот мой android код уведомления:
//used: https://blog.nishanil.com/2014/12/16/scheduled-notifications-in-android-using-alarm-manager/
// new notifications service
public class AndroidReminderService : IReminderService
{
public void Remind(DateTime dateTime, string title, string message)
{
// create alarm intent
Intent alarmIntent = new Intent(Application.Context, typeof(AlarmReceiver));
alarmIntent.PutExtra("message", message);
alarmIntent.PutExtra("title", title);
// specify the broadcast receiver
PendingIntent pendingIntent = PendingIntent.GetBroadcast(Application.Context, 0, alarmIntent, PendingIntentFlags.UpdateCurrent);
AlarmManager alarmManager = (AlarmManager)Application.Context.GetSystemService(Context.AlarmService);
// set the time when app is woken up
// todo: this is where time is adjusted
alarmManager.SetInexactRepeating(AlarmType.ElapsedRealtimeWakeup, SystemClock.ElapsedRealtime() + 5* 1000, 1000, pendingIntent);
}
}
[BroadcastReceiver]
public class AlarmReceiver : BroadcastReceiver
{
const string channelId = "default";
public override void OnReceive(Context context, Intent intent)
{
var message = intent.GetStringExtra("message");
var title = intent.GetStringExtra("title");
var notIntent = new Intent(context, typeof(MainActivity));
var contentIntent = PendingIntent.GetActivity(context, 0, notIntent, PendingIntentFlags.CancelCurrent);
var manager = NotificationManagerCompat.From(context);
var style = new NotificationCompat.BigTextStyle();
style.BigText(message);
// sets notifcation logo
int resourceId;
resourceId = Resource.Drawable.xamarin_logo;
var wearableExtender = new NotificationCompat.WearableExtender().SetBackground(BitmapFactory.DecodeResource(context.Resources, resourceId));
// Generate a notification
// todo look at notification compat properties
var builder = new NotificationCompat.Builder(context, channelId)
.SetContentIntent(contentIntent)
.SetSmallIcon(Resource.Drawable.notification_template_icon_bg)
.SetContentTitle(title)
.SetContentText(message)
.SetStyle(style)
.SetWhen(Java.Lang.JavaSystem.CurrentTimeMillis())
.SetAutoCancel(true)
.Extend(wearableExtender);
var notification = builder.Build();
manager.Notify(0, notification);
}
}