【问题标题】:how to make Alarm repeats for particular time interval in Xamarin Droid project?如何在 Xamarin Droid 项目中重复特定时间间隔的警报?
【发布时间】:2018-02-17 09:24:00
【问题描述】:

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

提前致谢。

【问题讨论】:

  • 您如何检查警报没有响起(您是否正在以待处理的意图登录到 logcat)?您正在触发什么类型的待处理意图?同样Wakeup 仅唤醒 cpu,因此它可以运行您的待处理意图,它不会唤醒屏幕。

标签: android xamarin alarmmanager repeatingalarm


【解决方案1】:

为了让警报在设备处于睡眠状态时在正确的时间可靠地触发 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 中有一个如何做到这一点的示例。

【讨论】:

    【解决方案2】:

    改变这一行...

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-12
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      相关资源
      最近更新 更多