发布:2021/11/9 9:04:27作者:管理员 来源:本站 浏览次数:1124
我期待在Xamarin Forms中使用C#创建基于文本的Android游戏。当应用程序关闭时推送通知
在故事中,我想设置角色任务,这会花费他们一些时间,例如, “我会去挖这个洞,当我完成后,我会给你一个嗡嗡声。”
如何设置通知以在设置的时间之后出现?例如上述说法可能需要10分钟,那么用户会收到通知以继续游戏?
我一个星期前才开始C#,所以我很抱歉,如果这是不好的,或已经被问到。我到处寻找,但有几种类型的通知,并且当我尝试理解它时,似乎我正在读法语。
我将通过创建2个接口在PCL项目启动:
public interface IAlarm {
void SetAlarm();
}
public interface INotification {
void Notify(LocalNotification notification);
}
然后,在Android项目,创建实现:
报警助手
[assembly: Dependency(typeof(AlarmHelper))]
namespace Test.Droid
{
class AlarmHelper: IAlarm
{
public void SetAlarm(int minutes)
{
var alarmTime = Calendar.Instance;
alarmTime.Add(CalendarField.Minute, minutes);
var intent = new Intent(Android.App.Application.Context, typeof(ScheduledAlarmHandler));
var pendingIntent = PendingIntent.GetBroadcast(Android.App.Application.Context, 0, intent, PendingIntentFlags.CancelCurrent);
var alarmManager = Android.App.Application.Context.GetSystemService(Context.AlarmService) as AlarmManager;
alarmManager.Set(AlarmType.RtcWakeup, alarmTime.TimeInMillis, pendingIntent);
}
}
}
通知助手
[assembly: Dependency(typeof(NotificationHelper))]
namespace Test.Droid
{
class NotificationHelper : INotification
{
public void Notify (string title, string text)
{
NotificationManager notificationManager = (NotificationManager) Android.App.Application.Context.GetSystemService(Context.NotificationService);
Intent intent = new Intent(Android.App.Application.Context, typeof(MainActivity));
PendingIntent pIntent = PendingIntent.GetActivity(Android.App.Application.Context, 0, intent, PendingIntentFlags.OneShot);
Notification nativeNotification = new Notification();
var builder = new NotificationCompat.Builder(Android.App.Application.Context)
.SetContentTitle(title)
.SetContentText(text)
.SetSmallIcon(Resource.Drawable.ic_notif) // 24x24 dp
.SetLargeIcon(BitmapFactory.DecodeResource(Android.App.Application.Context.Resources, Android.App.Application.Context.ApplicationInfo.Icon))
.SetPriority((int)NotificationPriority.Default)
.SetAutoCancel(true)
.SetContentIntent(pIntent);
notificationManager.Notify(0, builder.Build()); // Id 0 can be random
}
}
}
当等待时间结束后,BroadCastReceiver将被称为:
alarmHelper = DependencyService.Get<IAlarm>();
alarmSetter.SetAlarm(10); // 10 minutes from now
我:
[BroadcastReceiver]
class ScheduledAlarmHandler : WakefulBroadcastReceiver
{
public override void OnReceive(Context context, Intent intent)
{
// Implement quick checking logic here if notification is still required, plus its tittle and text
// you have 10 seconds max in this method and cannot use 'await'
var notificationHelper = new NotificationHelper();
notificationHelper.Notify("Title","Text");
}
}
在PCL项目游戏逻辑,你可以按照如下设置新闹铃有意分开了通知逻辑,以便在10分钟后检查是否仍应显示通知并设置其标题和文本。另一种方法是在使用intent.putextra设置闹钟时传递标题和文本。
© Copyright 2014 - 2024 柏港建站平台 ejk5.com. 渝ICP备16000791号-4