从的OnDestroy或日历的onPause

问题描述:

获取数据我有这样的代码:从的OnDestroy或日历的onPause

namespace TestB 
{ 
    [Activity(Label = "TestB", MainLauncher = true, Icon = "@drawable/icon")] 
    public class MainActivity : Activity 
    { 
     Java.Util.Calendar calendar; 
     protected override void OnCreate(Bundle bundle) 
     { 
      base.OnCreate(bundle); 
      SetContentView(Resource.Layout.Main); 
      Button button = FindViewById<Button>(Resource.Id.MyButton); 

      try 
      { 
       calendar = Java.Util.Calendar.Instance; 
       calendar.TimeInMillis = Java.Lang.JavaSystem.CurrentTimeMillis(); 
      } 
      catch (Exception ex) 
      { 
       Toast.MakeText(this, ex.Message.ToString(), ToastLength.Short).Show(); 
      } 
     } 
     protected override void OnDestroy() 
     { 
      base.OnDestroy(); 
      if (calendar.Get(Java.Util.CalendarField.HourOfDay) == 13 && calendar.Get(Java.Util.CalendarField.Minute) == 33) 
       Toast.MakeText(this, calendar.Get(Java.Util.CalendarField.HourOfDay).ToString() + " " + calendar.Get(Java.Util.CalendarField.Minute).ToString(), ToastLength.Short).Show(); 
     } 
     protected override void OnPause() 
     { 
      base.OnPause(); 
      if (calendar.Get(Java.Util.CalendarField.HourOfDay) == 13 && calendar.Get(Java.Util.CalendarField.Minute) == 33) 
       Toast.MakeText(this, calendar.Get(Java.Util.CalendarField.HourOfDay).ToString() + " " + calendar.Get(Java.Util.CalendarField.Minute).ToString(), ToastLength.Short).Show(); 
     } 

当时间来到13和33分钟,该消息将不会发行。 我想以这种方式拨打alarmManager。 我想有calendar.Set(Java.Util.CalendarField.HourOfDay, 13)calendar.Set(Java.Util.CalendarField.Minute, 33),并以这种方式致电alarmManager

编辑1:

我编辑的代码:

System.Timers.Timer t; 
       if (t == null) 
       { 
        t = new System.Timers.Timer(); 
        //t.Elapsed += new System.Timers.ElapsedEventHandler(t_Elapsed); 
        //t.Elapsed += (sender, args) => FireTheMissiles(); 
        t.Elapsed += new System.Timers.ElapsedEventHandler(OnTimeEvent); 
        t.Interval = 1000; 
        t.Enabled = true; 
       } 
       t.Start(); 
     protected override void OnStop() 
     { 
      base.OnStop(); 
      flag = 3; 
     } 
     private void OnTimeEvent(object source, ElapsedEventArgs e) 
     { 
      h = DateTime.Now.Hour; 
      m = DateTime.Now.Minute; 

      RunOnUiThread(delegate 
      { 
       if (flag == 3) 
       { 
        if (calendar.Get(Java.Util.CalendarField.HourOfDay) == h && calendar.Get(Java.Util.CalendarField.Minute) == m) 
         Toast.MakeText(this, "3 " + calendar.Get(Java.Util.CalendarField.HourOfDay).ToString() + " " + calendar.Get(Java.Util.CalendarField.Minute).ToString(), ToastLength.Short).Show(); 
       } 
      }); 
     } 

我问朋友来实现另一个应用程序这个项目,看看如果应用程序没有开24小时会出现一个消息,但任何消息都不会出现。

编辑2:

我用你的代码。
我也使用了定时器。
我在数据库中保存了安装时间和日期等信息。
我希望闹钟按时间和日期显示。
但经过多次尝试,我没有收到任何警报消息。

private void OnTimeEvent(object source, ElapsedEventArgs e) 
{ 
    RunOnUiThread(delegate 
    { 
     if (flag == 1) 
     { 
     } 
     int h = DateTime.Now.Hour; 
     int m = DateTime.Now.Minute; 
     DateTime today = DateTime.Today; 
     dc = today.AddDays(1).Day; 
     mc = today.AddDays(1).Month; 
     yc = today.AddDays(1).Year; 
     var data = mydb.Table<DatB>(); 
     var data1 = data.Where(x => x.DWSeen == dc).Where(x => x.MWSeen == mc).FirstOrDefault(); 
     if (flag == 3 && data1 != null && data1.RFSeen == 0) 
     { 
      startAlertAtParticularTime(data1.HourSeen, data1.MinuteSeen, "-1"); 
      if (calendar.Get(Java.Util.CalendarField.HourOfDay) == h && calendar.Get(Java.Util.CalendarField.Minute) == m && calendar.Get(Java.Util.CalendarField.DayOfMonth) == dc && calendar.Get(Java.Util.CalendarField.Month) == mc && calendar.Get(Java.Util.CalendarField.Year) == yc && data1.RFSeen == 0) 
      { 
       startAlertAtParticularTime(data1.HourSeen, data1.MinuteSeen, data1.RFSeen.ToString()); 
      } 
     } 
    }); 
} 

“-1”表示该报警不会出现
“0”表示报警将出现

​​
+0

不知道你想做什么,你想从你的应用程序设置一个闹钟时间13:33? –

+0

是的,我希望应用程序在关闭的特定时间提醒您 – arz

+0

您是否检查过我的答案,有没有更新? –

是的,我希望应用程序在同时特定的时间提醒已关闭

首先,您需要创建一个BroadcastReceiver来处理来自系统的警报通知。然后你可以使用AlarmManager设置闹钟在OnPauseOnDestroy

Intent myintent = new Intent(this, typeof(AlarmReceiver)); 
var pendingintent = PendingIntent.GetBroadcast(this, 0, myintent, PendingIntentFlags.UpdateCurrent); 

Java.Util.Date date = new Java.Util.Date(); 
Java.Util.Calendar cal = Java.Util.Calendar.Instance; 
calendar.TimeInMillis = Java.Lang.JavaSystem.CurrentTimeMillis(); 
cal.Set(Java.Util.CalendarField.HourOfDay, 13); 
cal.Set(Java.Util.CalendarField.Minute, 33); 
cal.Set(Java.Util.CalendarField.Second, 0); 
AlarmManager alarmManager = this.GetSystemService(AlarmService) as AlarmManager; 
alarmManager.Set(AlarmType.RtcWakeup, cal.TimeInMillis, pendingintent); 

对于BroadcastReceiver部分,你可以参考Cheesebaron的答案在这种情况下:Xamarin AlarmManager Android

+0

你好。我做了编辑2。 – arz