当前位置: 首页 > 知识库问答 >
问题:

应用程序关闭时推送通知

张高澹
2023-03-14

我想用Xamarin格式的C#创建一个基于文本的Android游戏。

在故事中,我想设置角色任务,这需要一些时间,例如“我去挖这个洞,完成后给你打电话。”

如何将通知设置为在设置的时间之后显示?例如,上述声明可能需要10分钟,然后用户收到继续游戏的通知?

我一周前才开始做C#,所以如果这是noobish,或者已经被问到了,我道歉。我到处都找过,但有几种类型的通知,当我试图理解它时,似乎我在读法语。

共有2个答案

彭星津
2023-03-14

>

  • 将此行添加到您的AndroidManifest。xml

    <uses-permission android:name="android.permission.WAKE_LOCK" />
    

    在Android项目中实现BroadcastRecector

    [BroadcastReceiver]
    public class NotificationBroadcastReceiver : BroadcastReceiver
    {
      private ApprovalDataStore _approvalDataStore => DependencyService.Get<ApprovalDataStore>();
    
      public override async void OnReceive(Context context, Intent intent)
      {
         var pm = PowerManager.FromContext(context);
         var wakeLock = pm.NewWakeLock(WakeLockFlags.Partial, "GCM Broadcast Reciever Tag");
         wakeLock.Acquire();
    
         //Write your code here
    
         // When you are finished
         wakeLock.Release();
      }
    }
    

  • 牧璞
    2023-03-14

    首先,我将在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
            }
        }
    }
    

    当等待时间结束时,将调用BroadCastRecector

    [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项目游戏逻辑中,您可以按如下方式设置新警报:

    alarmHelper = DependencyService.Get<IAlarm>();
    alarmSetter.SetAlarm(10); // 10 minutes from now
    

    我故意把闹钟分开

     类似资料:
    • 如果应用程序关闭,我将如何使其发送通知?我正在制作一个从web服务器读取数据的应用程序,只有当该应用程序关闭且web服务器上的值更改时,我才需要向用户发送通知。

    • Firebase push在某些设备上不起作用,当应用程序关闭时只有数据负载。请参阅以下线程:https://github.com/firebase/quickstart-android/issues/41 我知道当应用程序被swipe杀死时,一些OEM会杀死应用程序的所有服务,这些服务直接影响FirebbaseMessagingService并且由于这个onMessageReceived()方法

    • 当应用程序完全关闭时,如何以编程方式发送通知? 示例:用户关闭应用程序,也在Android Taskmanager中,然后等待。应用程序应在X秒后或应用程序检查更新时发送通知。 我试图使用这些代码示例,但是: 应用程序关闭时推送通知-活动太多/无法工作 我如何让我的应用程序在关闭时发送通知很多信息,但我不知道如何处理 当android应用程序关闭时,如何发送本地通知?-很多信息,但我不知道如何处理

    • 我目前正在开发Android(Cordova)应用程序,我正在使用Oneignal推送通知。首先,如果我关闭应用程序,推送通知不会被传递,所以我不得不添加一个Cordova插件来保持我的应用程序在后台运行: 我在deviceready之后的代码: 谢了。

    • null 我还试了一下: 关闭应用程序进程-&>;关闭设备-&>;打开设备电源-&>;发送通知。。。并且没有收到通知! 看起来firebase只有在设备启动了应用程序而不是100%关闭的情况下才能收到通知,我的意思是,只需用后退键关闭它而不是关闭应用程序进程。 这怎么可能呢?据推测,即使应用程序关闭,firebase也应该收到通知。 我正在Nexus5X和Android 8.0上进行测试,我使用的

    • 我的应用程序有推送通知(FCM)。当应用程序在前台运行时,我可以在onMessageReceived()函数中获取数据负载。当应用程序在后台运行或应用程序完全关闭时,不会调用onMessageReceived()函数。我的问题是,当app在后台或关闭时,是否可能获得数据有效载荷? 提前道谢!