2017-10-09 3 views
-1

Je possède ce code:Pour obtenir des données de calendrier dans OnDestroy ou 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(); 
     } 

Lorsque vient le temps de 13 et 33 minutes, le message ne sera pas publié. Je veux appeler le alarmManager de cette manière. Je veux avoir calendar.Set(Java.Util.CalendarField.HourOfDay, 13) et calendar.Set(Java.Util.CalendarField.Minute, 33) et d'appeler alarmManager de cette façon.

EDIT 1:

J'édité ce code:

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(); 
       } 
      }); 
     } 

J'ai demandé à mes amis de mettre en œuvre ce projet sur une autre application et voir si un message apparaît si l'application n'a pas ouvert pendant 24 heures , mais aucun message n'apparaîtra.

EDIT 2:

J'ai utilisé votre code.
J'ai également utilisé la minuterie.
J'ai enregistré les informations comme l'heure et la date d'installation dans la base de données.
Je voulais que l'alarme apparaisse par heure et date.
Mais après plusieurs tentatives, je n'ai reçu aucun message d'alerte.

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 » signifie que l'alarme n'apparaîtra
« 0 » signifie que l'alarme apparaît

namespace TestB 
{ 
    [BroadcastReceiver(Enabled = true)] 
    public class MyBR: BroadcastReceiver 
    { 
     public override void OnReceive(Context context, Intent intent) 
     { 
      string dataSeenResult = intent.GetStringExtra("dataSeen"); 
      if ((MyApp.isActivityVisible() == "Stopped" || MyApp.isActivityVisible() == "Destroyed") && dataSeenResult == "0") 
      { 
       Toast.MakeText(context, MyApp.isActivityVisible().ToString(), ToastLength.Short).Show(); 
      } 
     } 
    } 
} 
+0

Ne sais pas ce que vous voulez faire, voulez-vous définir une alarme avec l'heure 13:33 de votre application? –

+0

Oui Je veux que l'application à l'alerte à un moment donné pendant la fermeture – arz

+0

Avez-vous vérifié ma réponse, une mise à jour? –

Répondre

0

Oui Je veux l'application d'alerte à un moment précis alors qu'il est fermé

Premièrement, vous devrez créer un BroadcastReceiver pour gérer la notification d'alarme du système. Ensuite, vous pouvez utiliser AlarmManager pour régler l'alarme dans votre OnPause ou OnDestroy:

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

Pour la partie BroadcastReceiver, vous pouvez vous référer à la réponse de Cheesebaron dans ce cas: Xamarin AlarmManager Android.

+0

Bonjour. J'ai fait EDIT 2. – arz