我正在使用Xamarin开发一个Android应用程序。我试图弄清楚如何让它使用AlarmManager以可变间隔发送通知。我已经弄清楚如何触发通知并以固定间隔发送通知(比如每五分钟)。但是在某些情况下我希望间隔更动态。例如,假设我想在每天日落时收到通知。由于日落之间的时间间隔是变化的,我如何安排时间间隔会变化的通知?
下面是我的代码,适用于固定的时间间隔:
public void SendNotification( int id
, string title
, string message
, DateTime notifyTime
, long interval)
{
if ( ! _channelInitialized)
{
CreateNotificationChannel();
}
var intent = new Intent(AndroidApp.Context
, typeof(AlarmHandler));
intent.PutExtra(TitleKey
, title);
intent.PutExtra(MessageKey
, message);
var pendingIntent = PendingIntent.GetBroadcast(AndroidApp.Context
, id
, intent
, PendingIntentFlags.UpdateCurrent);
var triggerTime = GetNotifyTime(notifyTime);
var alarmManager = AndroidApp.Context
.GetSystemService(Context.AlarmService) as AlarmManager;
alarmManager?.SetRepeating(AlarmType.RtcWakeup
, triggerTime
, interval
, pendingIntent);
}
1条答案
按热度按时间0s0u357o1#
这完全取决于你的闹钟响得有多准确,以及你是否事先知道间隔时间,或者它们是动态获得的。
因此,如果您事先知道时间间隔,则可以使用以下命令设置多个警报(通过在
PendingIntent
、docs上使用不同的id),使其在指定的时间间隔准确地发出例如,idk您的特定场景,但这里您有一个包含两个报警的通用示例:
如果需要动态更新间隔/时间,则需要创建一个在后台运行的
Service
,并更新AlarmManager
上的警报,或者每次在BroadcastReceiver
上接收警报时,设置下一个警报时间。设置精确报警时要小心,因为它们会消耗资源,如果可能,应设置不精确报警。
此外,如果您要设置精确的警报,请记住设置适当的权限,如果您的目标是Android 12+:
大多数情况下
SCHEDULE_EXACT_ALARM
就足够了,在下面的情况下可以使用后者:您的应用程序是闹钟应用程序或计时器应用程序。您的应用程序是日历应用程序,用于显示即将发生的事件的通知