Programe la notificación usando el administrador de alarmas en formularios xamarin para android


public void ShowNotification(string message, string title) { Intent alarmIntent = new Intent(Forms.Context, typeof(AlarmReceiver)); alarmIntent.PutExtra ("message", message); alarmIntent.PutExtra ("title", title); PendingIntent pendingIntent = PendingIntent.GetBroadcast(Forms.Context, 0, alarmIntent, PendingIntentFlags.UpdateCurrent); AlarmManager alarmManager = (AlarmManager) Forms.Context.GetSystemService(Context.AlarmService); //TODO: For demo set after 5 seconds. alarmManager.Set(AlarmType.RtcWakeup, DateTime.Now.Millisecond + 30000, pendingIntent); } 


 [BroadcastReceiver] public class AlarmReceiver : BroadcastReceiver { public override void OnReceive (Context context, Intent intent) { var message = intent.GetStringExtra ("message"); var title = intent.GetStringExtra ("title"); var notIntent = new Intent (context, typeof(MainActivity)); var contentIntent = PendingIntent.GetActivity (context, 0, notIntent, PendingIntentFlags.CancelCurrent); var manager = NotificationManagerCompat.From (context); var style = new NotificationCompat.BigTextStyle(); style.BigText(message); //Generate a notification with just short text and small icon var builder = new NotificationCompat.Builder (context) .SetContentIntent (contentIntent) .SetSmallIcon (Resource.Drawable.Icon) .SetContentTitle (title) .SetContentText (message) .SetStyle (style) .SetWhen (Java.Lang.JavaSystem.CurrentTimeMillis ()) .SetAutoCancel (true); var notification = builder.Build(); manager.Notify(0, notification); } } 

  • Y en archivo de manifiesto

 <receiver android:name=".AlarmReceiver" android:enabled="true" android:exported="true" android:process=":remote" android:label="AlarmReceiver"> 

  • El código anterior se ejecuta perfectamente cuando la aplicación está en estado de ejecución Sin embargo, la notificación no funciona cuando se cierra o se cierra la aplicación

2 Solutions collect form web for “Programe la notificación usando el administrador de alarmas en formularios xamarin para android”

1) Si alguien mata su aplicación, las alarmas registradas en su aplicación se cancelan.

2) Puede iniciar su servicio en segundo plano en el Boot del dispositivo para registrar sus alarmas, o ejecutar cualquier otro código que necesite para configurar sus notificaciones …

  • Agregue "android.intent.action.BOOT_COMPLETED" a su BroadcastReceiver:

 [BroadcastReceiver] [IntentFilter(new string[]{"android.intent.action.BOOT_COMPLETED"}, Priority = (int)IntentFilterPriority.LowPriority)] public class AlarmReceiver : BroadcastReceiver 

  • En su manifiesto agregue en el permiso de arranque completo:

 <uses-permission android:name="android.permission.WAKE_LOCK"/> <uses-permission android:name="com.android.alarm.permission.SET_ALARM"/> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission> 

En el caso del ejemplo de precio de acciones de Xamarin, si establece "RECEIVE_BOOT_COMPLETED", reinicia automáticamente su servicio y el usuario empezará a recibir notificaciones al reiniciar el teléfono sin iniciar primero la aplicación:

 [BroadcastReceiver] [IntentFilter(new string[]{StockService.StocksUpdatedAction,Boo "android.intent.action.BOOT_COMPLETED"}, Priority = (int)IntentFilterPriority.LowPriority)] public class StockNotificationReceiver : BroadcastReceiver 

3) Puede utilizar un Service vs. a SeviceIntent y anular el StartCommandResult para devolver Sticky

Con un servicio basado en Sticky, se reinicia si se termina.

Constante para devolver desde onStartCommand (Intent, int, int): si el proceso de este servicio se cancela mientras se inicia (después de regresar de onStartCommand (Intente, int, int)), déjelo en el estado iniciado pero no lo retenga Intención de entrega. Posteriormente, el sistema intentará volver a crear el servicio. Debido a que está en el estado iniciado, garantizará llamar a inStartCommand (Intent, int, int) después de crear la nueva instancia de servicio; Si no hay ningún comando de inicio pendiente que se entregue al servicio, se llamará con un objeto de intención nula, por lo que debe tener cuidado para comprobarlo.

  public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId) { return StartCommandResult.Sticky; } 

AlarmManager funcionará cuando la aplicación se ejecute en primer plano o en segundo plano. Pero cuando se cierra la aplicación / force-stopped / killed Administrador de alarmas también se muere. La alarma se apagará de nuevo sólo si Android se vuelve a arrancar o la aplicación es lanzada de nuevo por el usuario. Consulte estas respuestas también para referencia link1 , link2

  • No se puede usar el diseño de ScrollView dentro de SlidingUpPanelLayout Xamarin Android
  • ¿Cómo detectar la salida de la aplicación en android?
  • VideoView se bloquea después de mucho tiempo jugando
  • Android FragmentTab host y Fragmentos dentro de Fragmentos
  • Cómo solucionar "OutOfMemoryError: java heap space" al compilar la aplicación MonoDroid en MonoDevelop
  • Xamarin Android deserializa el archivo json local
  • Error: JNI ERROR (bug de la aplicación): se accede a la referencia global obsoleta
  • F # en Mono para Android
  • Zxing integración en la aplicación monodroid
  • Xamarin aplicaciones son grandes por qué y pueden ser más pequeños
  • ¿Debo usar MonoDroid o Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.