Xamarin AlarmManager安卓

编程入门 行业动态 更新时间:2024-10-09 20:27:31
本文介绍了Xamarin AlarmManager安卓的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我已经创建了一个快速的xamarin android项目.最终,我想在下面学习一下,并将其应用于在Android和ios之间共享的xamarin表单项目.现在,我只专注于Android方面.

我一直在尝试学习如何安排本地通知在将来的某个时间出现.制作了一个快速扔掉的应用程序,下面是我编写的AlarmReceiver类以及下面的MainActivity.cs.

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 = NotificationManager.FromContext(context); //Generate a notification with just short text and small icon var builder = new Notification.Builder(context) .SetContentIntent(contentIntent) .SetContentTitle(title) .SetContentText(message) .SetWhen(Java.Lang.JavaSystem.CurrentTimeMillis()) .SetAutoCancel(true); var notification = builder.Build(); manager.Notify(0, notification); } } public class MainActivity : Activity { // Unique ID for our notification: private static readonly int ButtonClickNotificationId = 1000; // Number of times the button is tapped (starts with first tap): private int count = 1; protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); SetContentView(Resource.Layout.Main); // Display the "Hello World, Click Me!" button and register its event handler: Button button = FindViewById<Button>(Resource.Id.MyButton); button.Click += ButtonOnClick; } // Handler for button click events. private void ButtonOnClick(object sender, EventArgs eventArgs) { Intent alarmIntent = new Intent(Application.Context, typeof(AlarmReceiver)); alarmIntent.PutExtra("message", "This is my test message!"); alarmIntent.PutExtra("title", "This is my test title!"); PendingIntent pendingIntent = PendingIntent.GetBroadcast(Application.Context, 0, alarmIntent, PendingIntentFlags.UpdateCurrent); AlarmManager alarmManager = (AlarmManager)Application.Context.GetSystemService(Context.AlarmService); alarmManager.Set(AlarmType.ElapsedRealtime, SystemClock.ElapsedRealtime() + 1 * 1000, pendingIntent); } }

当我逐步调试它时,似乎没有调用我的OnReceive方法.

我一直在关注这篇文章,因为我很难研究如何通过Google搜索正确执行此操作.此处:预定通知

如果任何人都可以分享一些智慧,将不胜感激.

解决方案

问题是您的BroadcastReceiver没有[BroadcastReceiver]属性.

此代码有效:

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

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 ios. For now I'm just focusing on the Android side of things.

I've been trying to learn how to schedule a local notification to appear at some time in the future. Made a quick throw away application, below is the AlarmReceiver Class I've written, as well as the MainActivity.cs below.

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 = NotificationManager.FromContext(context); //Generate a notification with just short text and small icon var builder = new Notification.Builder(context) .SetContentIntent(contentIntent) .SetContentTitle(title) .SetContentText(message) .SetWhen(Java.Lang.JavaSystem.CurrentTimeMillis()) .SetAutoCancel(true); var notification = builder.Build(); manager.Notify(0, notification); } } public class MainActivity : Activity { // Unique ID for our notification: private static readonly int ButtonClickNotificationId = 1000; // Number of times the button is tapped (starts with first tap): private int count = 1; protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); SetContentView(Resource.Layout.Main); // Display the "Hello World, Click Me!" button and register its event handler: Button button = FindViewById<Button>(Resource.Id.MyButton); button.Click += ButtonOnClick; } // Handler for button click events. private void ButtonOnClick(object sender, EventArgs eventArgs) { Intent alarmIntent = new Intent(Application.Context, typeof(AlarmReceiver)); alarmIntent.PutExtra("message", "This is my test message!"); alarmIntent.PutExtra("title", "This is my test title!"); PendingIntent pendingIntent = PendingIntent.GetBroadcast(Application.Context, 0, alarmIntent, PendingIntentFlags.UpdateCurrent); AlarmManager alarmManager = (AlarmManager)Application.Context.GetSystemService(Context.AlarmService); alarmManager.Set(AlarmType.ElapsedRealtime, SystemClock.ElapsedRealtime() + 1 * 1000, pendingIntent); } }

When I step through and debug this, it appears that my OnReceive method is not being called.

I was following this article as I'm having a really tough time researching how to do this correctly via google searches. Here: Scheduled Notifications

If anyone could share some wisdom, would greatly appreciate it.

解决方案

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

更多推荐

Xamarin AlarmManager安卓

本文发布于:2023-11-27 10:01:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1637609.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Xamarin   AlarmManager

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!