我想得到一些约会,我已经保存在数据库中,他们有一个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" />
- 更新**
我已经允许从设备自动启动我的应用程序,它可以正常工作
1条答案
按热度按时间cczfrluj1#
您可以尝试使用Firebase推送通知。
通过推送通知,您可以更新用户,而无需始终运行应用程序或让它轮询服务器,从而可能耗尽电池。
有关详细信息,请检查Implementing Push Notifications in Your Android Apps和Firebase Cloud Messaging。