Android 安排带有系统日期的本地通知,并在不启动应用程序的情况下进行通知(Xamarin.Forms)
我正在尝试根据SQLite中设置的时间安排本地通知,我正在使用此链接中的某个库: 我已经很好地实现了它,但仍然面临以下问题: a) 只有在我启动应用程序时才会发出通知 b) 所有通知时间只通知一次,这些通知存储在SQLite本地 现在我如何使此应用程序捕获系统时间(电话时间) 而且它像警报一样发出通知,甚至不启动应用程序 我是否应该使用以下方法之一: i)睡觉 ii)简历等或… 下面是我如何将代码放入App.cs的 现在,我如何让这个应用程序捕获系统时间(电话时间)并像警报一样发出通知,而不启动应用程序 您可以使用,此类提供对系统报警服务的访问。这些允许您安排应用程序在将来的某个时间运行。当警报响起时,系统会广播为其注册的意图,如果目标应用程序尚未运行,则会自动启动该应用程序 既然您使用XF进行开发,那么首先您应该能够在Android客户端项目中创建一个用于广播的接收器,例如:Android 安排带有系统日期的本地通知,并在不启动应用程序的情况下进行通知(Xamarin.Forms),android,sqlite,notifications,xamarin.forms,Android,Sqlite,Notifications,Xamarin.forms,我正在尝试根据SQLite中设置的时间安排本地通知,我正在使用此链接中的某个库: 我已经很好地实现了它,但仍然面临以下问题: a) 只有在我启动应用程序时才会发出通知 b) 所有通知时间只通知一次,这些通知存储在SQLite本地 现在我如何使此应用程序捕获系统时间(电话时间) 而且它像警报一样发出通知,甚至不启动应用程序 我是否应该使用以下方法之一: i)睡觉 ii)简历等或… 下面是我如何将代码放入App.cs的 现在,我如何让这个应用程序捕获系统时间(电话时间)并像警报一样发出通知,而不启
[广播接收器]
公共类AlarmReceiver:BroadcastReceiver
{
公共覆盖void OnReceive(上下文、意图)
{
var message=intent.GetStringExtra(“消息”);
var title=intent.GetStringExtra(“title”);
var resultint=新意图(上下文、类型(MainActivity));
resultIntent.SetFlags(ActivityFlags.NewTask | ActivityFlags.ClearTask);
var pending=pendingent.GetActivity(上下文,0,
结果,
PendingEventFlags.CancelCurrent);
变量生成器=
新建Notification.Builder(上下文)
.SetContentTitle(标题)
.SetContentText(消息)
.SetSmallIcon(Resource.Drawable.Icon)
.SetDefaults(NotificationDefaults.All);
builder.SetContentIntent(待定);
var notification=builder.Build();
var manager=NotificationManager.FromContext(上下文);
经理通知(10010,通知);
}
}
然后在XF中,当我们需要使用来自PCL的每个平台的本机方法时,我们可以使用来实现它
在PCL中,创建如下界面:
公共接口ISetAlarm
{
无效设置报警(整数小时,整数分钟);
}
然后,在Android客户端项目中,实现此接口,例如:
[程序集:Xamarin.Forms.Dependency(typeof(SetAlarmImplementation))]
名称空间YOURNAMESPACE.Droid
{
公共类setAlarm实现:ISetAlarm
{
公共无效设置报警(整数小时,整数分钟)
{
Intent myintent=新的Intent(Xamarin.Forms.Forms.Context,typeof(AlarmReceiver));
var pendingintent=pendingintent.GetBroadcast(Xamarin.Forms.Forms.Context,0,myintent,PendingIntentFlags.UpdateCurrent);
Java.Util.Date Date=新建Java.Util.Date();
Java.Util.Calendar cal=Java.Util.Calendar.Instance;
cal.TimeInMillis=Java.Lang.JavaSystem.CurrentTimeMillis();
cal.Set(Java.Util.CalendarField.HourOfDay,hour);
Set(Java.Util.CalendarField.Minute,Minute);
cal.Set(Java.Util.CalendarField.Second,0);
AlarmManager AlarmManager=Xamarin.Forms.Forms.Context.GetSystemService(Android.Content.Context.AlarmService)作为AlarmManager;
alarmManager.Set(AlarmType.RtcWakeup、cal.TimeInMillis、PendingEvent);
}
}
}
最后,当您想从PCL调用它时,您可以这样调用它:
DependencyService.Get().SetAlarm(13,30);
So@Grace如果我实现所有这些,它是否也能在IOS上工作?@IdrisStack,不,正如我在DependencyService
部分中所说,我们需要在每个平台上实现本机方法,因此对于IOS,应该有自己的API。您可以查看DependencyServcice
的官方文档,了解PCL中的接口和每个平台中的类是如何协同工作的。顺便说一句,我对iOS不太熟悉,如果你需要,你可以发布一个新的线程,要求在XF的iOS上实现。好的,@Grace,我真的很感谢你的帮助,现在这行DependencyService.Get().SetAlarm(13,30)
可以像在App.cs
中一样放置?@IdrisStack,是的。我需要其他帮助,如何在PCL中设置标题和消息?
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Globalization;
using Diabetes.localDB;
using Diabetes.Main;
using Newtonsoft.Json;
using Plugin.Notifications;
using Xamarin.Forms;
namespace Diabetes
{
public partial class App : Application
{
public App()
{
InitializeComponent();
// Setting the Alarm time
MedicationDatabase db = new MedicationDatabase();
//Getting list of time set in SQlite.
var alarm_list = db.GetAlarmList();
// Looping each time to make an alarm
foreach (var alarm in alarm_list)
{
try
{
Debug.WriteLine("Date Time Format : " + alarm);
//This is the library to set Notifications, Date is where the time is attached.
CrossNotifications.Current.Send(new Notification
{
Title = "Hola! ",
Message = "Hey Eddy I remind you take insulin, this is the time you told me to remind you.",
Vibrate = true,
Sound = "pop",
Date = DateTime.Parse(alarm)
});
}
catch (FormatException v)
{
Debug.WriteLine("Format Exception : " + v);
}
catch (OverflowException c)
{
Debug.WriteLine("Overflow Exception : " + c);
}
}
MainPage = new NavigationPage(new Login())
{
BarBackgroundColor = Color.FromHex("#66C8F3"),
BarTextColor = Color.White,
Title = "Diabetics App"
};
}
protected override void OnStart()
{
}
protected override void OnSleep()
{
// Handle when your app sleeps
}
protected override void OnResume()
{
// Handle when your app resumes
}
}
}