Локальные уведомления Xamarin Forms

Я пытаюсь создать приложение, которое планирует различные действия, такие как ходьба и бег, с помощью Xamarin Forms. Я потратил несколько дней, пытаясь заставить его работать, но я просто не мог найти правильный способ сделать это.

Итак, я хочу, чтобы приложение работало в фоновом режиме и в определенное время показывало уведомление о том, что пришло время сделать какое-то упражнение. Это довольно тривиально. Я смог запланировать уведомления с помощью кросс-платформенных подключаемых модулей Xamarin. Но когда пользователь нажимает на уведомление, оно снова возвращает его на главную страницу. Несмотря на то, что я перехожу на страницу упражнений до отображения уведомления. Поэтому лучший способ — контролировать то, что появляется, когда пользователь нажимает на уведомление. Я нашел специфичный для Android пример отображения уведомления и перенаправления пользователя на второе действие в проекте Android. Я не смог найти способ адаптировать этот код для приложения форм Xamarin.

Чего я еще не пробовал, так это создать страницу упражнений в проекте Android и попытаться оттуда открыть мою страницу упражнений Forms. Но я почти уверен, что есть лучший способ справиться с этим, не создавая ненужный класс.

Я не прошу конкретный код, а правильную реализацию с некоторыми советами или инструкциями. Либо мне нужно реализовать уведомления для каждой платформы самостоятельно и работать оттуда, либо использовать кросс-платформенный плагин для отображения уведомлений и каким-то образом перенаправить пользователя на правильную страницу в формах. Второй кажется проще, но я до сих пор не знаю, как это делается.

tl;dr правильный способ перенаправить уведомление пользователя о нажатии на второе действие в Xamarin Forms

public void ShowNotification()
        {
        var valuesForActivity = new Bundle();
        valuesForActivity.PutInt(COUNT_KEY, count);

        // When the user clicks the notification, SecondActivity will start up.
        var resultIntent = new Intent(this, typeof(exerciseWalking));

        // Pass some values to SecondActivity:
        resultIntent.PutExtras(valuesForActivity);

        // Construct a back stack for cross-task navigation:
        var stackBuilder = TaskStackBuilder.Create(this);
        stackBuilder.AddParentStack(Class.FromType(typeof(exerciseWalking)));
        stackBuilder.AddNextIntent(resultIntent);

        // Create the PendingIntent with the back stack:
        var resultPendingIntent = stackBuilder.GetPendingIntent(0, (int)PendingIntentFlags.UpdateCurrent);

        // Build the notification:
        var builder = new NotificationCompat.Builder(this, CHANNEL_ID)
                      .SetAutoCancel(true) // Dismiss the notification from the notification area when the user clicks on it
                      .SetContentIntent(resultPendingIntent) // Start up this activity when the user clicks the intent.
                      .SetContentTitle("Button Clicked") // Set the title
                      .SetNumber(count) // Display the count in the Content Info
                      //.SetSmallIcon(Resource.Drawable.icon) // This is the icon to display
                      .SetContentText($"The button has been clicked {count} times."); // the message to display.

        // Finally, publish the notification:
        var notificationManager = NotificationManagerCompat.From(this);
        notificationManager.Notify(NOTIFICATION_ID, builder.Build());

        // Increment the button press count:
        count++;
    }

Это код из одного из примеров. В строке 14 со stackBuilder.AddParentStack это не позволит мне использовать мою страницу содержимого Forms. Ему нужна активность Android. Но я не хочу создавать его только для того, чтобы открыть страницу форм. Что я даже не уверен, что это возможно. Спасибо.

вы можете использовать свою MainActivity в качестве результата PEndingIntent, а затем в MainActivity открыть страницу с формами

Leo Zhu - MSFT 22.01.2019 02:52

Это хорошее решение, как я уже сказал выше, ссылка: stackoverflow.com/questions/47459995/…

Leo Zhu - MSFT 22.01.2019 03:05

может сработать?

Leo Zhu - MSFT 25.01.2019 06:24
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
3
802
0

Другие вопросы по теме