如何在 Xamarin Droid 项目中重复特定时间间隔的警报?

how to make Alarm repeats for particular time interval in Xamarin Droid project?

我使用 Xamarin Droid 创建了一个警报应用程序。为特定时间设置闹钟效果很好。当我尝试在特定时间间隔内重复警报时,它无法在特定时间发出警报。该应用程序甚至需要向睡眠中的应用程序发出警报。下面的代码是我在 Xamarin Droid 项目中尝试设置和重复警报的。请指导我以正确的方式实现我的重复警报解决方案!

设置特定时间的闹钟:

 manager.Set(AlarmType.ElapsedRealtime, SystemClock.ElapsedRealtime() + 60 * 1000 * int.Parse(notifytime), pendingIntent);

我需要每 15 分钟重复一次闹钟

 manager.SetRepeating(AlarmType.ElapsedRealtimeWakeup, SystemClock.ElapsedRealtime()+10, AlarmManager.IntervalFifteenMinutes, pendingIntent);

提前致谢。

当设备处于休眠状态时,为了让警报能够在 Android 的正确时间可靠地触发操作,必须实施几个部分,它们都涉及在目标 PendingIntent 时保持唤醒锁正在 运行。我假设您的 PendingIntent 指的是 BroadcastReceiverService 而不是 Activity,因为计时器上的 运行ning 活动通常没有用。如果您的 PendingIntent 的目标没有持有唤醒锁,则无法保证该操作会在调用警报时实际发生。 This 很老的帖子讨论了使用 AlarmManager 唤醒设备缺乏保证。

解决方案是确保您的 PendingIntent 目标所做的第一件事是在设备上保持唤醒锁定。您必须做的第一件事是允许您的应用程序持有唤醒锁。这是通过将以下权限添加到您的 AndroidManifest.xml 文件来完成的。

<uses-permission android:name="android.permission.WAKE_LOCK" />

谢天谢地,@jon-douglas 编写了一些 Xamarin 示例代码来演示 here. While this will probably get you the result that you want, it seems that the best practice is not to directly call a Service, but instead to use an intermediary WakefulBroadcastReceiver that starts your service for you. There is an example of how to do this in the Android documentation for WakefulBroadcastReceiver

更改此行...

manager.SetRepeating(AlarmType.ElapsedRealtimeWakeup, SystemClock.ElapsedRealtime()+10, AlarmManager.IntervalFifteenMinutes, pendingIntent);

 manager.setRepeating(AlarmManager.RTC_WAKEUP, Calendar.getInstance().getTimeInMillis(),15*60*1000, pintent);

也加上这个

<uses-permission android:name="android.permission.WAKE_LOCK" />

到您的 AndroidManifest.xml 文件,正如 #Avi Cherry 所说!!

schedule a repeating alarm