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

标签 android xamarin alarmmanager repeatingalarm

我使用 Xamarin Droid 创建了一个警报应用程序。为特定时间设置闹钟效果很好。当我尝试在特定时间间隔内重复警报时,它无法在特定时间发出警报。该应用程序甚至需要向 sleep 中的应用程序发出警报。下面的代码是我在 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);

提前致谢。

最佳答案

当设备处于 sleep 状态时,为了让闹钟能够在正确的时间在 Android 上可靠地触发操作,必须实现几个部分,它们都涉及在目标 PendingIntent 运行时保持唤醒锁。我假设您的 PendingIntent 指的是 BroadcastReceiverService 而不是 Activity 因为在计时器上运行 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 中有一个如何执行此操作的示例。 .

关于android - 如何在 Xamarin Droid 项目中重复特定时间间隔的警报?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46116673/

相关文章:

java - 陷入 Alarmmanager 结构 - Java Android 应用程序

java - Firebase DynamicLinks 在版本 16.1.1 上失败

java - Android,使用Edittext

xamarin - 未处理的异常 : System. TypeLoadException:无法使用 token 0100003b 解析类型

c# - Xamarin:运行进程时阻止 sleep 模式

java - Android,BroadCastReceiver 中的 onReceive 被多次调用

Android Studio onStop() 中的数组

android - 如何对 Android 源代码做一个小改动,并合并到你自己的项目中

xamarin - 如何访问 DependencyService 中的 native 控件?

java - Android 中未调用闹钟