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