Xamarin Формы локальных уведомлений - PullRequest
0 голосов
/ 21 января 2019

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

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

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

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

tl; dr правильный способ перенаправить уведомление о щелчке пользователя ко второму действию в формах Xamarin

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, он не позволяет мне использовать мою страницу содержимого форм. Требуется активность андроида. Но я не хочу создавать его, просто чтобы открыть страницу форм. Что я не уверен, даже возможно. Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...