0

我尝试使用适用于 Android、ios 和 WinPhone 的 Xamarin Forms 实现共享项目。我想使用通知,我遵循了这个示例(https://github.com/edsnider/Xamarin.Plugins/tree/master/Notifier)并且能够在 Android 中创建本地通知。但我仍然不明白如何使用 Android 应用程序。打开一个页面或检查该页面是否已经处于活动状态或中止所有平台的广播。任何可以帮助我的链接?我是否正确,它只适用于我必须在每个平台上实现的接口,或者是否存在任何其他解决方案?

我的基本问题是我从 xmpp 协议获取消息,并希望向用户发送消息通知或更新 ui(如果打开)...

谢谢你的帮助...

4

1 回答 1

1

您不必为您的平台项目添加任何接口,只需将 nuget 包安装到两个项目 Android/IOS。

在 IOS 上,您应该添加:

// Ask the user for permission to get notifications on iOS 8.0+
            if (UIDevice.CurrentDevice.CheckSystemVersion (8, 0)) {
                var settings = UIUserNotificationSettings.GetSettingsForTypes (
                    UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound,
                    new NSSet ());
                UIApplication.SharedApplication.RegisterUserNotificationSettings (settings);
            }

到你的方法:

public override bool FinishedLaunching (UIApplication app, NSDictionary options)

在 AppDelegate 中:

然后在您的共享项目中调用:

using Plugin.LocalNotifications.Abstractions;


    CrossLocalNotifications.Current.Show("You've got mail", "You have 793 unread messages!");

在替换当前页面时,您无需执行任何操作,Xamarin Forms 将为您处理。

同样在 android 上,您可以通过设置 MainActivity 的 LaunchMode 来控制应用程序的重新启动行为:

例子:

LaunchMode = Android.Content.PM.LaunchMode.SingleInstance, AlwaysRetainTaskState = true

要了解有关 Android 上的 LauchModes 的更多信息,请阅读:

https://developer.android.com/guide/components/tasks-and-back-stack.html

并检查其他活动标志:

FLAG_ACTIVITY_NEW_TASK
FLAG_ACTIVITY_CLEAR_TOP
FLAG_ACTIVITY_SINGLE_TOP

目前此插件不允许在应用程序内捕获任何通知。但是您可以通过使用特定于平台的功能来做到这一点

IOS:请参考 https://developer.xamarin.com/guides/cross-platform/application_fundamentals/notifications/ios/remote_notifications_in_ios/

  public override void ReceivedLocalNotification(UIApplication application, UILocalNotification notification)
  {
     MessagingCenter.Send<MainPage> (this, "IOS notification received");
  }

Android:在阅读了这个插件的源代码后,我发现,您可以在您的 on create 方法中检查 Bundle 以获取键 ScheduledAlarmHandler.LocalNotificationKey

protected override void OnCreate(Bundle bundle)
{
  base.OnCreate(bundle);
  if(bundle.ContainsKey(ScheduledAlarmHandler.LocalNotificationKey)){
      //App launched form notification
    MessagingCenter.Send<MainPage> (this, "Android notification received");
  }
}

您也可以尝试使用 BroadcastReceiver 类; https://developer.xamarin.com/api/type/Android.Content.BroadcastReceiver/

于 2016-10-11T11:15:55.700 回答