xamarin 根据数据库中的数据获取提醒

ozxc1zmp  于 2023-02-01  发布在  其他
关注(0)|答案(1)|浏览(104)

我想得到一些约会,我已经保存在数据库中,他们有一个notificationTime属性巫婆是当需要显示通知的时间提醒。
到目前为止,我的方法是编写某种作业,每天运行1或2次,以提取需要在未来24小时内注册的通知,并注册它们(如果你们有更好的想法)
这是可行的,但是:

  • 仅当应用程序处于前台/后台时;然后我每15分钟左右就会收到一次通知
  • 如果我杀死应用程序,我不会收到通知我的物理设备(小米Redmi Note 9 Pro与Android版本12 SKQ),只有在虚拟的(像素5 Android 13)

现在我有一个扩展JobService的类,我使用JobScheduler来安排作业每15分钟运行一次(用于测试,因此我不需要12h xD)
下面是我在OnCreate方法的MainActivity文件中调用的JobScheduler命令

Console.WriteLine("Schedualing job");
            TimeSpan interval = TimeSpan.FromMinutes(15);

            var javaClass = Java.Lang.Class.FromType(typeof(NotificationService));
            var componentName = new ComponentName(Application.Context, javaClass);

            var jobInfo = new JobInfo.Builder(1, componentName)
                .SetPeriodic(15 * 60 * 1000, 30 * 60 * 1000)
                .SetRequiredNetworkType(NetworkType.Any)
                .SetPersisted(true)
                .Build();
            
            var jobScheduler = (JobScheduler)GetSystemService(JobSchedulerService);
            var resultCode = jobScheduler.Schedule(jobInfo);

这是通知服务. cs

[Service(Name = "com.companyname.deratizare_mobile.NotificationService",
        Permission = "android.permission.BIND_JOB_SERVICE")]
    public class NotificationService : JobService
    {
        public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId)
        {
            return StartCommandResult.StickyCompatibility;
        }

        public override bool OnStartJob(JobParameters @params)
        {
            Console.WriteLine("Job started");
            Task.Run(async () =>
            {
                //var hasSuccessful = await ProccessNotificationToRegister();
                var notification = new NotificationRequest
                {
                    Title = "Job",
                    Description = $"Description",
                    Schedule = new NotificationRequestSchedule
                    {
                        NotifyTime = DateTime.Now,
                    }
                };

                LocalNotificationCenter.Current.Show(notification);
                JobFinished(@params, false);
            Console.WriteLine("Job finished");
            });
            return true;
        }

        public override bool OnStopJob(JobParameters @params)
        {
            Console.WriteLine("Job stopped");
            return true;
        }
}

机器人清单

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY" />
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <uses-permission android:name="android.permission.BIND_JOB_SERVICE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    • 更新**

我已经允许从设备自动启动我的应用程序,它可以正常工作

cczfrluj

cczfrluj1#

您可以尝试使用Firebase推送通知。
通过推送通知,您可以更新用户,而无需始终运行应用程序或让它轮询服务器,从而可能耗尽电池。
有关详细信息,请检查Implementing Push Notifications in Your Android AppsFirebase Cloud Messaging

相关问题