Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安排带有系统日期的本地通知,并在不启动应用程序的情况下进行通知(Xamarin.Forms)_Android_Sqlite_Notifications_Xamarin.forms - Fatal编程技术网

Android 安排带有系统日期的本地通知,并在不启动应用程序的情况下进行通知(Xamarin.Forms)

Android 安排带有系统日期的本地通知,并在不启动应用程序的情况下进行通知(Xamarin.Forms),android,sqlite,notifications,xamarin.forms,Android,Sqlite,Notifications,Xamarin.forms,我正在尝试根据SQLite中设置的时间安排本地通知,我正在使用此链接中的某个库: 我已经很好地实现了它,但仍然面临以下问题: a) 只有在我启动应用程序时才会发出通知 b) 所有通知时间只通知一次,这些通知存储在SQLite本地 现在我如何使此应用程序捕获系统时间(电话时间) 而且它像警报一样发出通知,甚至不启动应用程序 我是否应该使用以下方法之一: i)睡觉 ii)简历等或… 下面是我如何将代码放入App.cs的 现在,我如何让这个应用程序捕获系统时间(电话时间)并像警报一样发出通知,而不启

我正在尝试根据SQLite中设置的时间安排本地通知,我正在使用此链接中的某个库:

我已经很好地实现了它,但仍然面临以下问题:

a) 只有在我启动应用程序时才会发出通知

b) 所有通知时间只通知一次,这些通知存储在SQLite本地

现在我如何使此应用程序捕获系统时间(电话时间) 而且它像警报一样发出通知,甚至不启动应用程序

我是否应该使用以下方法之一:

i)睡觉

ii)简历等或…

下面是我如何将代码放入App.cs的

现在,我如何让这个应用程序捕获系统时间(电话时间)并像警报一样发出通知,而不启动应用程序

您可以使用,此类提供对系统报警服务的访问。这些允许您安排应用程序在将来的某个时间运行。当警报响起时,系统会广播为其注册的意图,如果目标应用程序尚未运行,则会自动启动该应用程序

既然您使用XF进行开发,那么首先您应该能够在Android客户端项目中创建一个用于广播的接收器,例如:

[广播接收器]
公共类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
        }





    }
}