Xamarin AlarmManager Android

后端 未结 1 746
囚心锁ツ
囚心锁ツ 2020-12-03 12:42

I\'ve created a quick xamarin android project. Eventually I will want to take the learning below and apply it to a xamarin forms project that is shared between android and i

相关标签:
1条回答
  • 2020-12-03 13:26

    The problem is that your BroadcastReceiver does not have the [BroadcastReceiver] attribute.

    This code works:

    AlarmReceiver.cs

    [BroadcastReceiver]
    public class AlarmReceiver : BroadcastReceiver
    {
        public override void OnReceive(Context context, Intent intent)
        {
            var message = intent.GetStringExtra("message");
            var title = intent.GetStringExtra("title");
    
            var resultIntent = new Intent(context, typeof(MainActivity));
            resultIntent.SetFlags(ActivityFlags.NewTask | ActivityFlags.ClearTask);
    
            var pending = PendingIntent.GetActivity(context, 0,
                resultIntent,
                PendingIntentFlags.CancelCurrent);
    
            var builder =
                new Notification.Builder(context)
                    .SetContentTitle(title)
                    .SetContentText(message)
                    .SetSmallIcon(Resource.Drawable.Icon)
                    .SetDefaults(NotificationDefaults.All);
    
            builder.SetContentIntent(pending);
    
            var notification = builder.Build();
    
            var manager = NotificationManager.FromContext(context);
            manager.Notify(1337, notification);
        }
    }
    

    MainActivity.cs

    [Activity(Label = "App3", MainLauncher = true, Icon = "@drawable/icon")]
    public class MainActivity : Activity
    {
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
    
            SetContentView(Resource.Layout.Main);
    
            var button = FindViewById<Button>(Resource.Id.MyButton);
    
            button.Click += delegate
            {
                var alarmIntent = new Intent(this, typeof(AlarmReceiver));
                alarmIntent.PutExtra("title", "Hello");
                alarmIntent.PutExtra("message", "World!");
    
                var pending = PendingIntent.GetBroadcast(this, 0, alarmIntent, PendingIntentFlags.UpdateCurrent);
    
                var alarmManager = GetSystemService(AlarmService).JavaCast<AlarmManager>();
                alarmManager.Set(AlarmType.ElapsedRealtime, SystemClock.ElapsedRealtime() + 5*1000, pending);
            };
        }
    }
    
    0 讨论(0)
提交回复
热议问题