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

时间:2017-09-08 12:31:30

标签: android xamarin alarmmanager repeatingalarm

使用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);

提前致谢。

2 个答案:

答案 0 :(得分:2)

当设备处于睡眠状态时,为了使警报在Android上的正确时间可靠地触发操作,必须执行多个部分,并且它们都涉及在运行目标PendingIntent时保持唤醒锁定。我假设您的PendingIntent引用BroadcastReceiverService而不是Activity,因为在计时器上运行活动通常没用。如果PendingIntent的目标没有保持唤醒锁定,则无法保证在调用警报时实际发生该操作。 This非常老的线程讨论了使用AlarmManager唤醒设备的缺乏保证。

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

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

值得庆幸的是,@ jon-douglas编写的一些Xamarin示例代码演示了此here。虽然这可能会为您提供所需的结果,但最佳做法似乎是直接调用Service,而是使用启动的中间WakefulBroadcastReceiver为您服务。有一个如何在Android documentation for WakefulBroadcastReceiver中执行此操作的示例。

答案 1 :(得分:0)

改变这一行......

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