protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); AppCenter.Start(Secrets.ANDROID_APP_CENTER_SECRET, typeof(Analytics), typeof(Crashes)); adapter = new TabsAdapter(this, SupportFragmentManager); pager = FindViewById <ViewPager>(Resource.Id.viewpager); var tabs = FindViewById <TabLayout>(Resource.Id.tabs); pager.Adapter = adapter; tabs.SetupWithViewPager(pager); pager.OffscreenPageLimit = 3; SupportActionBar.SetDisplayHomeAsUpEnabled(false); SupportActionBar.SetHomeButtonEnabled(false); var alarmIntent = new Intent(this, typeof(AlarmReceiver)); var pendingIntent = PendingIntent.GetBroadcast(this, 0, alarmIntent, 0); var alarmManager = AlarmManager.FromContext(this); alarmManager.SetInexactRepeating(AlarmType.ElapsedRealtimeWakeup, SystemClock.ElapsedRealtime() + AlarmManager.IntervalHalfHour, AlarmManager.IntervalHalfHour, pendingIntent); }
public void Dispose() { var am = AlarmManager.FromContext(Application.Context); am?.Cancel(pendingIntent); pendingIntent.Cancel(); }
public IScheduledToastCancellation ScheduleTo(DateTimeOffset deliveryTime) { var tid = ToastId.New(); var @do = CalculateDeliveryOffset(deliveryTime); var pi = intentManager.RegisterToShowWithDelay(notificationBuilder, tid); var am = AlarmManager.FromContext(Application.Context) ?? throw new InvalidOperationException(ErrorStrings.KAlarmManagerError); am.Set(AlarmType.ElapsedRealtimeWakeup, @do, pi); return(new AlarmCancellation(pi, tid)); }
internal void ScheduleTrade() { var context = Application.Context; var manager = AlarmManager.FromContext(context); using (var intent = new Intent(context, this.GetType())) using (var alarmIntent = PendingIntent.GetService(context, 0, intent, PendingIntentFlags.UpdateCurrent)) { if (this.Settings.NextTradeTime > 0) { var currentTime = Java.Lang.JavaSystem.CurrentTimeMillis(); Info("Current UNIX time is {0}.", currentTime); var nextTradeTime = Math.Max(GetEarliestTradeTime(), this.Settings.NextTradeTime); manager.Set(AlarmType.RtcWakeup, nextTradeTime, alarmIntent); Info("Set alarm time to {0}.", nextTradeTime); } else { manager.Cancel(alarmIntent); Info("Cancelled alarm."); } } }
public static void RegisterReceiver(Context context, int type = -1) { ISharedPreferences preferences = PreferenceManager.GetDefaultSharedPreferences(context); long repeatInterval; switch (type) { case -1: repeatInterval = preferences.GetBoolean(SettingsActivity.MonitoringSummaryType, false) ? AlarmManager.IntervalDay * 7 : AlarmManager.IntervalDay; break; case 1: repeatInterval = AlarmManager.IntervalDay * 7; break; default: repeatInterval = AlarmManager.IntervalDay; break; } Intent alarmIntent = new Intent(context, typeof(AlarmReceiver)); AlarmPendingIntent = PendingIntent.GetBroadcast(context, 909, alarmIntent, PendingIntentFlags.UpdateCurrent); Calendar calendar = Calendar.Instance; calendar.TimeInMillis = Java.Lang.JavaSystem.CurrentTimeMillis(); calendar.Set(CalendarField.HourOfDay, 21); calendar.Set(CalendarField.Minute, 00); AlarmManager.FromContext(context).SetInexactRepeating(AlarmType.RtcWakeup, calendar.TimeInMillis, repeatInterval, AlarmPendingIntent); }
private void HandleRegistration(Context context, Intent intent) { var registrationId = intent.GetStringExtra(Constants.ExtraRegistrationId); var error = intent.GetStringExtra(Constants.ExtraError); var unregistered = intent.GetStringExtra(Constants.ExtraUnregistered); //Logger.Debug("handleRegistration: registrationId = " + registrationId + ", error = " + error + ", unregistered = " + unregistered); // registration succeeded if (registrationId != null) { GcmClient.ResetBackoff(context); GcmClient.SetRegistrationId(context, registrationId); OnRegistered(context, registrationId); return; } // unregistration succeeded if (unregistered != null) { // Remember we are unregistered GcmClient.ResetBackoff(context); var oldRegistrationId = GcmClient.ClearRegistrationId(context); OnUnRegistered(context, oldRegistrationId); return; } // last operation (registration or unregistration) returned an error; //Logger.Debug("Registration error: " + error); // Registration failed if (Constants.ErrorServiceNotAvailable.Equals(error)) { var retry = OnRecoverableError(context, error); if (retry) { var backoffTimeMs = GcmClient.GetBackoff(context); var nextAttempt = backoffTimeMs / 2 + sRandom.Next(backoffTimeMs); //Logger.Debug("Scheduling registration retry, backoff = " + nextAttempt + " (" + backoffTimeMs + ")"); var retryIntent = new Intent(Constants.IntentFromGcmLibraryRetry); retryIntent.PutExtra(ExtraToken, token); var retryPendingIntent = PendingIntent.GetBroadcast(context, 0, retryIntent, PendingIntentFlags.OneShot); var am = AlarmManager.FromContext(context); am.Set(AlarmType.ElapsedRealtime, SystemClock.ElapsedRealtime() + nextAttempt, retryPendingIntent); // Next retry should wait longer. if (backoffTimeMs < MaxBackoffMs) { GcmClient.SetBackoff(context, backoffTimeMs * 2); } } } else { // Unrecoverable error, notify app OnError(context, error); } }
private void handleRegistration(Context context, Intent intent) { var registrationId = intent.GetStringExtra(Constants.EXTRA_REGISTRATION_ID); var error = intent.GetStringExtra(Constants.EXTRA_ERROR); var unregistered = intent.GetStringExtra(Constants.EXTRA_UNREGISTERED); Logger.Debug("handleRegistration: registrationId = " + registrationId + ", error = " + error + ", unregistered = " + unregistered); // registration succeeded if (registrationId != null) { GcmClient.ResetBackoff(context); GcmClient.SetRegistrationId(context, registrationId); OnRegistered(context, registrationId); return; } // unregistration succeeded if (unregistered != null) { // Remember we are unregistered GcmClient.ResetBackoff(context); var oldRegistrationId = GcmClient.ClearRegistrationId(context); OnUnRegistered(context, oldRegistrationId); return; } // last operation (registration or unregistration) returned an error; Logger.Debug("Registration error: " + error); // Registration failed if (Constants.ERROR_SERVICE_NOT_AVAILABLE.Equals(error)) { var retry = OnRecoverableError(context, error); if (retry) { int backoffTimeMs = GcmClient.GetBackoff(context); int nextAttempt = backoffTimeMs / 2 + sRandom.Next(backoffTimeMs); Logger.Debug("Scheduling registration retry, backoff = " + nextAttempt + " (" + backoffTimeMs + ")"); var retryIntent = new Intent(Constants.INTENT_FROM_GCM_LIBRARY_RETRY); retryIntent.PutExtra(EXTRA_TOKEN, TOKEN); var retryPendingIntent = PendingIntent.GetBroadcast(context, 0, retryIntent, PendingIntentFlags.OneShot); var am = AlarmManager.FromContext(context); am.Set(AlarmType.ElapsedRealtime, SystemClock.ElapsedRealtime() + nextAttempt, retryPendingIntent); // Next retry should wait longer. if (backoffTimeMs < MAX_BACKOFF_MS) { GcmClient.SetBackoff(context, backoffTimeMs * 2); } } else { Logger.Debug("Not retrying failed operation"); } } else { // Unrecoverable error, notify app OnError(context, error); } }
protected override void OnHandleIntent(Intent intent) { try { Context context = this.ApplicationContext; if (context != null && intent != null) { string action = intent.Action; var registrationId = intent.GetStringExtra(MyPlugConstants.EXTRA_REGISTRATION_ID); var error = intent.GetStringExtra(MyPlugConstants.EXTRA_ERROR); var unregistered = intent.GetStringExtra(MyPlugConstants.EXTRA_UNREGISTERED); if (String.IsNullOrEmpty(error) == false) { if (String.Compare(error, MyPlugConstants.ERROR_SERVICE_NOT_AVAILABLE, true) == 0) { int backoffTimeMs = GetBackoff(); int nextAttempt = backoffTimeMs / 2 + new Random().Next(backoffTimeMs); var retryIntent = new Intent(MyPlugConstants.INTENT_FROM_GCM_LIBRARY_RETRY); retryIntent.PutExtra(MyPlugConstants.EXTRA_TOKEN, MyPlugConstants.TOKEN); var retryPendingIntent = PendingIntent.GetBroadcast(context, 0, retryIntent, PendingIntentFlags.OneShot); var am = AlarmManager.FromContext(context); am.Set(AlarmType.ElapsedRealtime, SystemClock.ElapsedRealtime() + nextAttempt, retryPendingIntent); // Next retry should wait longer. if (backoffTimeMs < MyPlugConstants.MAX_BACKOFF_MS) { SetBackoff(backoffTimeMs * 2); } } else { MyPushNotification.PushNotificationListener.OnError(new Exception(error)); } } else if (String.Compare(action, MyPlugConstants.GCM_Registeration, true) == 0) { if (unregistered != null) { //var oldID = GetRegistrationId(); MyPushNotification.PushNotificationListener.OnUnregistered(MyPushNotification.Current.Token); MyPushNotification.PushNotificationListener.StoreRegistrationId(""); } else { if (String.IsNullOrEmpty(registrationId) == false) { MyPushNotification.PushNotificationListener.StoreRegistrationId(registrationId); ResetBackoff(); MyPushNotification.PushNotificationListener.OnRegistered(registrationId); } else { MyPushNotification.PushNotificationListener.OnError(new Exception("MyNotificationService/OnHandleIntent register yes, but registeration ID is blank")); } } } else if (String.Compare(action, MyPlugConstants.GCM_Message, true) == 0) { // got a message. do something with it HandleMessage(context, intent); } else if (String.Compare(action, MyPlugConstants.INTENT_FROM_GCM_LIBRARY_RETRY, true) == 0) { var token = intent.GetStringExtra(MyPlugConstants.EXTRA_TOKEN); if (!string.IsNullOrEmpty(token) && !(MyPlugConstants.TOKEN.Equals(token))) { // make sure intent was generated by this class, not by a // malicious app. return; } MyPushNotification.PushNotificationListener.RetryRegister(); } else if (String.Compare(action, MyPlugConstants.GCM_BOOTCOMPLETED, true) == 0) { // ignore this. } else { // error occurred MyPushNotification.PushNotificationListener.OnError(new Exception("gcm action missed\r\n" + action)); } } } catch (Exception ex) { MyPushNotification.PushNotificationListener.OnError(ex); } finally { lock (LOCK) { try { //Sanity check for null as this is a public method if (sWakeLock != null && sWakeLock.IsHeld) { sWakeLock.Release(); } } catch { } } } }