Как перейти на определенную страницу, когда пользователь нажимает на локальное уведомление в приложении Xamarin Forms?

Привет, я разрабатываю приложение Xamarin Forms. Я реализовал локальные уведомления в приложении. Когда уведомление запущено, при нажатии на уведомление оно должно перейти на определенную страницу. В проекте iOS в Appdelegate.cs я написал этот метод

    public async  override void ReceivedLocalNotification(UIApplication application, UILocalNotification notification)

который сработает, когда пользователь нажмет на уведомление. здесь мне нужно перейти на страницу. Здесь я написал следующую строку кода

            App.Current.MainPage  = new NavigationPage(new FavoritesPage());

Он переходит на страницу «Избранное», но просто отображает пустую страницу. Метод OnNavigatedTo не вызывает FavoritesViewModel, а в Onnavigated to я вызываю метод, который принимает идентификатор (этот идентификатор исходит из уведомления) в качестве параметра для получения конкретного избранного. Здесь два вопроса: 1) Как перейти на конкретную страницу 2) Как для передачи параметра вместе с навигацией по странице. Может кто-нибудь, пожалуйста, помогите мне решить эту проблему.


person Santhosh Kumar    schedule 18.01.2018    source источник
comment
Вы решили проблему?   -  person Anonymous    schedule 22.01.2018


Ответы (2)


Для 1:

Вы хотите перейти на новую страницу, но вы заменили главную страницу приложения. попробуйте PushAsync. Вы можете подписаться на MessagingCenter в приложении:

public App ()
{
    InitializeComponent();

    MainPage = new NavigationPage(new MainPage());

    MessagingCenter.Subscribe<object, string>(this, "Push", async (sender, favoriteID) =>
    {
        var favorite = new FavoritesPage();
        favorite.FavoriteID = favoriteID;
        await (MainPage as NavigationPage).PushAsync(favorite, true);
    });
}

Эта лямбда сработает, когда вы вызовете MessagingCenter.Send<object, string>(this, "Push", "01"); Строка 01 здесь — это идентификатор, который я хочу отправить.

Для 2:

Прежде чем перейти на новую страницу, я определяю свойство с именем FavoriteID на этой странице, затем передаю строку, используя метод, описанный выше.

person Anonymous    schedule 19.01.2018
comment
Эй, спасибо за ваш ответ. Как я могу сделать те же шаги в Android? Какой метод сработает, когда пользователь нажмет на уведомление в Android? - person Santhosh Kumar; 22.01.2018
comment
@SanthoshKumar Когда вы пишете метод Send, срабатывает Subscribe. - person Anonymous; 22.01.2018
comment
Спрашиваю, в iOS этот метод публичного асинхронного переопределения void ReceivedLocalNotification (приложение UIApplication, уведомление UILocalNotification) будет срабатывать всякий раз, когда пользователь правильно нажимает на уведомление. Аналогично, какой метод будет запускаться в Android, когда пользователь нажимает на уведомление? Есть ли в Android какой-либо метод, похожий на ReceivedLocalNotification - person Santhosh Kumar; 23.01.2018
comment
@SanthoshKumar Я обнаружил, что тема может помочь вам здесь. Речь идет о том, как создать уведомление и запустить его. Вам просто нужно изменить метод push в операторе if. - person Anonymous; 23.01.2018
comment
Эй .. Спасибо за ваш ответ. Мне просто нужен метод, который будет срабатывать, когда пользователь нажимает на уведомление. Создаю локальные уведомления из PCL. Мне просто нужен метод в MainActivity.cs, который должен срабатывать, когда пользователь нажимает на уведомление. - person Santhosh Kumar; 23.01.2018
comment
@SanthoshKumar Если вы не реализуете уведомление на каждой платформе, используете ли вы расширение для достижения этого эффекта? пожалуйста, опубликуйте код о том, как вы реализуете это в PCL. Затем мы можем проанализировать, как его вызвать, но я рекомендую вам опубликовать новую ветку, если вы можете сделать это правильно на iOS. Тогда я могу дать новый ответ, чтобы увидеть, как мы можем это сделать. - person Anonymous; 23.01.2018
comment
Эй, я использую пакет xam.plugins.Notifier nuget для отправки локальных уведомлений, ниже приведен код для отправки уведомления CrossLocalNotifications.Current.Show(fav.ExtendedAttributes[Name] + fav.Key+ AppResources.NotificationDisplayText, fav.Key, int.Parse (любимый.Ключ), DateTime.Now.AddSeconds(30)); - person Santhosh Kumar; 23.01.2018
comment
@SanthoshKumar Я видел этот плагин, увидев его исходный код в Android, я обнаружил, что он не реализует метод триггера. Я рекомендую вам использовать службу зависимостей для реализации этого эффекта на каждой нативной платформе. Вы можете обратиться к теме, которую я только что упомянул. Это не трудно. - person Anonymous; 23.01.2018
comment
Земля, Есть ли другой способ сделать это. похоже на iOS? - person Santhosh Kumar; 23.01.2018
comment
@SanthoshKumar Android отличается, мы должны добавить PendingIntent.GetActivity(Xamarin.Forms.Forms.Context, 0, intent, 0);, чтобы установить Extras, а затем, когда приложение загружается в OnCreate(), мы можем получить это, чтобы указать, какую страницу мы хотим нажать. - person Anonymous; 23.01.2018
comment
Земля, я получаю какой-то идентификатор в уведомлении, как я могу получить этот идентификатор здесь? - person Santhosh Kumar; 23.01.2018
comment
@SanthoshKumar Устанавливается при создании этого уведомления. Он отличается от iOS. - person Anonymous; 23.01.2018
comment
@SanthoshKumar Я не думаю, что мы сможем сделать это с этим плагином. Автор не дал нам вход. Или вы можете попытаться определить, какую платформу использует пользователь, на Android мы можем сделать это, как сказал Элвис. Код из Android может легко добиться вашего эффекта. Я также думаю, что вам следует открыть новую ветку с вопросом о том, как запускать этот плагин, это также может помочь другим членам сообщества найти правильные ответы. - person Anonymous; 23.01.2018
comment
@SanthoshKumar Привет, СантошКумар, ты решил это? Если вы действительно не понимаете, как это сделать. Я могу попробовать сделать небольшой образец для вас. - person Anonymous; 24.01.2018
comment
Лэнд Лу, Было бы здорово, если бы вы могли сделать образец для меня. - person Santhosh Kumar; 29.01.2018
comment
@SanthoshKumar Вот небольшой пример. - person Anonymous; 31.01.2018
comment
@SanthoshKumar Тебе помогло? - person Anonymous; 01.02.2018
comment
Большое спасибо Земля. Я могу ориентироваться в нем. - person Santhosh Kumar; 02.02.2018
comment
@SanthoshKumar В этом примере есть метод перехода на новую страницу на Android. - person Anonymous; 02.02.2018
comment
Какой образец земли? - person Santhosh Kumar; 02.02.2018
comment
@SanthoshKumar Запустите мой образец здесь на Android. - person Anonymous; 02.02.2018
comment
Спасибо Земля. Я попробую и обращусь к вам, если мне понадобится помощь - person Santhosh Kumar; 02.02.2018

Используйте MessagingCenter, установите тип ContentPage или URL-адрес для MessagingCenter.Send, затем MessagingCenter.Subscribe и загрузите

person Artūras Paleičikas    schedule 18.01.2018
comment
я очень новичок в xamarin. Было бы здорово, если бы вы могли предоставить кусок кода, чтобы сделать это - person Santhosh Kumar; 18.01.2018
comment
взгляните на developer.xamarin.com/guides/xamarin -формы/ - person Artūras Paleičikas; 19.01.2018