专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-683-0016      微信咨询  |  联系我们

当应用程序关闭时推送通知

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/2/14 0:57:29       共计:3607 浏览

我期待在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设置闹钟时传递标题和文本。



版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:Xamarin.Forms学习系列之Android集成极光推送 | ·下一条:在 Xamarin.Android 中使用 Notification.Builder 构建通知

Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有    粤ICP备16019765号 

广州京杭网络科技有限公司 版权所有