使用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);
提前致谢。
答案 0 :(得分:2)
当设备处于睡眠状态时,为了使警报在Android上的正确时间可靠地触发操作,必须执行多个部分,并且它们都涉及在运行目标PendingIntent时保持唤醒锁定。我假设您的PendingIntent引用BroadcastReceiver
或Service
而不是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说!!