当应用加载但未在前台运行时,如何使我的应用发出通知? - c#

我有一个有时会使用的应用程序。我睡觉之前一定把它留在后台。醒来时,我在屏幕上看到此通知。

当应用加载但未在前台运行时,如何使我的应用发出通知? - c#

有人对我如何在XF应用程序中显示这样的通知有任何建议吗?

另外,这些通知还会出现在Android上吗?我从未在Android手机上看到它们,但这可能是因为我使用的次数少了。

参考方案

我们可以使用Shiny.Notifications NuGet Package在Xamarin.Forms中创建跨平台的本地通知

示例应用

使用以下代码创建的完整示例应用程序可以在以下位置找到:https://github.com/brminnick/LocalNotificationsSample

演练

1.安装Shiny.Notifications

将Shiny.Notifications NuGet Package添加到Xamarin.Forms项目,Xamarin.iOS项目和Xamarin.Android项目中。

2.初始化Shiny.Notifications

安卓系统

[Application]类的OnCreate中,通过调用Shiny.AndroidShinyHost.Init初始化Shiny并通过调用Shiny.Notifications.AndroidOptions.DefaultSmallIconResourceName设置其图标:

using System;
using Android.App;
using Android.Runtime;
using Shiny;

namespace LocalNotificationsSample.Droid
{
    [Application]
    public class YourApplication : Application
    {
        public YourApplication(IntPtr handle, JniHandleOwnership transfer) : base(handle, transfer)
        {
        }

        public override void OnCreate()
        {
            base.OnCreate();
            AndroidShinyHost.Init(this, platformBuild: services => services.UseNotifications());
            Notifications.AndroidOptions.DefaultSmallIconResourceName = "icon.png";
        }
    }
}

MainActivity.cs中的OnRequestPermission中,允许Shiny通过添加Shiny.AndroidShinyHost.OnRequestPermissionsResult(requestCode, permissions, grantResults);来呈现来自用户的请求通知权限

using Android.App;
using Android.Content.PM;
using Android.OS;
using Android.Runtime;

namespace LocalNotificationsSample.Droid
{
    [Activity(Label = "LocalNotificationsSample", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
    {
        public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
        {
            Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
            Shiny.AndroidShinyHost.OnRequestPermissionsResult(requestCode, permissions, grantResults);

            base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
        }

        protected override void OnCreate(Bundle savedInstanceState)
        {
            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource = Resource.Layout.Toolbar;

            base.OnCreate(savedInstanceState);

            Xamarin.Essentials.Platform.Init(this, savedInstanceState);
            global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
            LoadApplication(new App());
        }
    }
}

的iOS

AppDelegate.csFinishedLaunching中,通过调用Shiny.iOSShinyHost.Init初始化Shiny:

using Foundation;
using UIKit;
using Shiny;

namespace LocalNotificationsSample.iOS
{
    [Register(nameof(AppDelegate))]
    public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate
    {
        public override bool FinishedLaunching(UIApplication app, NSDictionary options)
        {
            iOSShinyHost.Init(platformBuild: services => services.UseNotifications());
            global::Xamarin.Forms.Forms.Init();
            LoadApplication(new App());

            return base.FinishedLaunching(app, options);
        }
    }
}

3.安排本地通知

在此示例中,我们将立即发送本地通知,并安排在应用启动后一分钟发送一次

using System;
using System.Threading.Tasks;
using Shiny;
using Shiny.Notifications;
using Xamarin.Forms;

namespace LocalNotificationsSample
{
    public partial class App : Application
    {
        public App()
        {
            InitializeComponent();

            MainPage = new MainPage();
        }

        protected override async void OnStart()
        {
            await SendNotificationNow();
            await ScheduleLocalNotification(DateTimeOffset.UtcNow.AddMinutes(1));
        }

        Task SendNotificationNow()
        {
            var notification = new Notification
            {
                Title = "Testing Local Notifications",
                Message = "It's working",
            };

            return ShinyHost.Resolve<INotificationManager>().RequestAccessAndSend(notification);
        }

        Task ScheduleLocalNotification(DateTimeOffset scheduledTime)
        {
            var notification = new Notification
            {
                Title = "Testing Local Notifications",
                Message = "It's working",
                ScheduleDate = scheduledTime
            };

            return ShinyHost.Resolve<INotificationManager>().Send(notification);
        }
    }
}

当应用加载但未在前台运行时,如何使我的应用发出通知? - c#
当应用加载但未在前台运行时,如何使我的应用发出通知? - c#

https://github.com/brminnick/LocalNotificationsSample

Android Firebase:将数据保存到数据库 - java

我正在尝试从Firebase保存和检索数据,但是在获取正确的语法时遇到了一些麻烦。用户通过电子邮件和密码的身份验证方法进行注册,并使用相同的详细信息登录。我有两个编辑文本字段,要求输入名称和语句。在两个编辑文本框下面有一个按钮,用于将数据保存到数据库。private void saveQuote(){ String name = author.getText…

如何使用C#代码和XAML在xamarin.forms中使用成语 - c#

如何使用成语使用C#和XAML代码以xamarin形式设置Grid(高度,宽度)填充,边距以及设置标签字体大小。我有一个在StackLayout中使用Rectangle的示例。但我不知道将其与其他控件一起使用。<StackLayout Spacing="10" AbsoluteLayout.LayoutFlags="All…

当回复有时是一个对象有时是一个数组时,如何在使用改造时解析JSON回复? - java

我正在使用Retrofit来获取JSON答复。这是我实施的一部分-@GET("/api/report/list") Observable<Bills> listBill(@Query("employee_id") String employeeID); 而条例草案类是-public static class…

ObjectDisposedException:CancellationTokenSource已处置 - c#

我开始在MacBook Pro上使用Xamarin Studio开发Xamarin.Forms。我构建了一个应用程序,其目的是查询PrestaShop网站,检索产品并显示它们。将应用程序部署到Android时,棉花糖以下的版本存在一些问题,但是我已解决了这些问题,因此在此不再赘述。将应用程序部署到iOS(模拟器)时,我仍然遇到严重问题。该应用程序运行,但是当…

Forms.py文件应该放在哪里? - python

我现在开始写我的第一个Django项目,我需要为应用创建我的forms.py文件。我见过一些教程将文件存储在项目的主文件夹下,而另一些则存储在app目录中。如果我想制作仅适用于一个应用程序的表单,哪种布局最适合我?是否可以制作多个文件来保存表单代码?谢谢! python大神给出的解决方案 这是标准布局:├── apps/ | ├── [app]/ | | ├…