Xamarn,AlarmManager不会在计划时间被解雇

时间:2017-09-01 17:43:04

标签: android xamarin xamarin.android alarmmanager

我遇到警报管理器的问题,但没有触发我的日程安排通知。

class MyNotification : INotification
    {
       private List<Note> ListNotes;
       Intent alarmIntent;
       DateTime baseTime = new DateTime(1970, 1, 1,0,0,0);

        public async void CreateScheduleNotifications()
       {
           ListNotes = await DataBaseService.getTimeActiveNotes();
           foreach(Note note in ListNotes )
            {               
                long scheduleAlarmTime = this.setScheduleAlarmTime(note.AlarmTime);  
                this.addNewScheduleNotification(note.Id,note.Title,note.Content,scheduleAlarmTime);
            }
        }

        private void addNewScheduleNotification(int id,string title, string content,long alarmTime)
        {
           alarmIntent = new Intent(MainActivity.AndroidContext, typeof(AlamReciver));

            alarmIntent.PutExtra("id", id);
            alarmIntent.PutExtra("title", title);
            alarmIntent.PutExtra("content", content);

            var PI = PendingIntent.GetBroadcast(MainActivity.AndroidContext, id, alarmIntent, PendingIntentFlags.CancelCurrent);

            AlarmManager alarmManager = (AlarmManager)MainActivity.AndroidContext.GetSystemService(Context.AlarmService);
            alarmManager.Set(AlarmType.RtcWakeup, alarmTime, PI);
        }

        private long setScheduleAlarmTime(DateTime noteAlarmTime)
        {
            TimeSpan calcTime = noteAlarmTime - baseTime;
            return (long)calcTime.TotalMilliseconds;
        }
    }

我的“noteAlarmTime”格式是(y,m,d,h,m,s)。 它在API 23的模拟器上运行完美,只在那里。在使用API​​ 25的模拟器或使用API​​ 23或25的智能手机上根本不起作用。

我尝试修改此行

alarmManager.Set(AlarmType.RtcWakeup, alarmTime, PI);  

为:

alarmManager.Set(AlarmType.ElapsedRealtime,SystemClock.ElapsedRealtime()+ 5 * 1000,PI); 然后解雇通知。

那么为什么通知实时通知不起作用?

谢谢。

时间计算:

private long setScheduleAlarmTime(DateTime noteAlarmTime)
        {
            TimeSpan calcTime = noteAlarmTime.ToUniversalTime() - baseTime; 
            return (long)calcTime.TotalMilliseconds;
        }

0 个答案:

没有答案