【问题标题】:Remove notification xamarin删除通知 xamarin
【发布时间】:2016-08-04 19:00:19
【问题描述】:

在我的应用程序中,我有在指定时间发生的通知(例如警报),我需要在用户退出应用程序后删除此通知。这可能吗?

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

    }
}

【问题讨论】:

  • 使用pendingIntent.Cancel();应用存在时可能在 app.cs 中

标签: android xamarin


【解决方案1】:
 PendingIntent pendingIntent;


 ...


 public void OnDestroy()
 {
 base.OnDestroy(); 

 pendingIntent.Cancel();
 }

点击此处:https://developer.xamarin.com/guides/android/application_fundamentals/activity_lifecycle/ 了解有关生命周期的更多信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    相关资源
    最近更新 更多