2016-08-04 79 views
2

在我的應用程序中,我有通知發生在指定的時間(類似警報),我需要在用戶退出應用程序後刪除此通知。這可能嗎?刪除通知xamarin

AlarmReceiver.cs

using Android.Content; 
using Android.App; 
using Android.Graphics; 

namespace XamarinWorkTimer.Droid 
{ 
    [BroadcastReceiver] 
    public class AlarmReceiver : BroadcastReceiver 
    { 
     NotificationManager manager; 
     public override void OnReceive(Context context, Intent intent) 
     { 

      string message = intent.GetStringExtra("message"); 
      string title = intent.GetStringExtra("title"); 

      Intent notIntent = new Intent(context, typeof(MainActivity)); 
      PendingIntent contentIntent = PendingIntent.GetActivity(context, 0, notIntent, PendingIntentFlags.CancelCurrent); 
      manager = NotificationManager.FromContext(context); 
      var style = new Notification.BigTextStyle(); 
      style.BigText(message); 

      int resourceId = Resource.Drawable.icon; 

      var wearableExtender = new Notification.WearableExtender() 
    .SetBackground(BitmapFactory.DecodeResource(context.Resources, resourceId)) 
       ; 

      //Generate a notification with just short text and small icon 
      var builder = new Notification.Builder(context) 
       .SetPriority((int)NotificationPriority.Max) 
       .SetVisibility(NotificationVisibility.Public) 
       .SetDefaults(NotificationDefaults.All) 
       .SetCategory(Notification.CategoryAlarm) 
       .SetContentIntent(contentIntent) 
       .SetSmallIcon(Resource.Drawable.icon) 
       .SetContentTitle(title) 
       .SetContentText(message) 
       .SetWhen(Java.Lang.JavaSystem.CurrentTimeMillis()) 
       .SetAutoCancel(true); 

      var notification = builder.Build(); 
      manager.Notify(0, notification); 
     } 

    } 
} 

AndroidReminderService.cs

using Android.Content; 
using Android.App; 
using Xamarin.Forms; 
using Android.OS; 

[assembly: Dependency(typeof(XamarinWorkTimer.Droid.AndroidReminderService))] 

namespace XamarinWorkTimer.Droid 
{ 
    public class AndroidReminderService : IReminderService 
    { 
     public void Remind(int seconds, string title, string message) 
     { 

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

      alarmManager.Set(AlarmType.ElapsedRealtimeWakeup, SystemClock.ElapsedRealtime() + seconds * 1000, pendingIntent); 
     } 

    } 
} 
+0

使用pendingIntent.Cancel更多信息();可能在應用程序存在的app.cs中 –

回答