在我的Xamarin.Forms项目中,我使用OneSignal进行通知。在iOS中, Xamarin.Forms.Application.Current.MainPage = new NavigationPage(new NotificationPage()); 起作用,但在Android中则不起作用。我试图使用消息传递中心与PCL项目进行通信。该应用程序在后台运行时有效,但在应用程序关闭时不运行。在Android中收到通知时,如何重定向通知特定页面?谢谢
注意:已编辑代码并解决了问题,我使用共享的首选项来控制应用是否从通知中启动。然后,我加载xamarin.Forms应用程序。
答案 0 :(得分:0)
在调用LoadApplication()方法之前,可以使用以下方法。
if (Intent.Extras != null)
{
foreach (var key in Intent.Extras.KeySet())
{
if (key != null)
{
var value = Intent.Extras.GetString(key);
Log.Debug(TAG, "Key: {0} Value: {1}", key, value);
}
}
}
LoadApplication(new App());
您必须在OnMessageReceivedMethod()中设置intent.putExtra()方法。
intent.PutExtra("Key", "value");
然后,您可以基于此键值在App.xaml.cs文件中使用重定向。因为在android中,在重新初始化应用程序时打开通知的情况。
我认为您不需要设置以下条件。
if (extrasList[0] == "true")
{
LoadApplication(new App(true));
}
else
{
LoadApplication(new App(false));
}
首先存储您的值全局级别,以便可以在App.cs文件中使用它。只需使用以下代码即可处理App()类中的页面导航。
if (Device.RuntimePlatform == Device.Android)
{
if (YourKey == "true")
{
//handle that page navigation
}
else
{
//Default Page of App
}
}
答案 1 :(得分:0)
注意:已编辑代码并解决了问题,我使用共享首选项来控制应用是否从通知启动。然后我加载xamarin.Forms应用程序
public class MainActivity :
global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
protected override void OnCreate(Bundle bundle)
{
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
base.OnCreate(bundle);
InitializeUI();
global::Xamarin.Forms.Forms.Init(this, bundle);
global::Xamarin.FormsMaps.Init(this, bundle);
ImageCircleRenderer.Init();
tV = new TextView(this);
resources = this.Resources;
OneSignal.Current.StartInit("***APP ID***")
.InFocusDisplaying(OSInFocusDisplayOption.Notification)
.HandleNotificationReceived(HandleNotificationReceived)
.HandleNotificationOpened(HandleNotificationOpened)
.EndInit();
ISharedPreferences prefs = PreferenceManager.GetDefaultSharedPreferences(this);
var LaunchFromNotification = prefs.GetString("is_notification_received", "false");
if (LaunchFromNotification == "true")
{
LoadApplication(new App(true));
}
else
{
LoadApplication(new App(false));
}
OneSignal.Current.IdsAvailable(IdsAvailable); //Lets you retrieve the OneSignal player id and push token.
}
}
private static void HandleNotificationOpened(OSNotificationOpenedResult result)
{
ISharedPreferences prefs = PreferenceManager.GetDefaultSharedPreferences(Android.App.Application.Context);
ISharedPreferencesEditor editor = prefs.Edit();
editor.PutString("is_notification_received", "true");
editor.Apply();
}
protected override void OnResume()
{
base.OnResume();
ISharedPreferences prefs =
PreferenceManager.GetDefaultSharedPreferences(this);
ISharedPreferencesEditor editor = prefs.Edit();
editor.Remove("is_notification_received");
editor.PutString("is_notification_received", "false");
editor.Apply();
}