Я пытаюсь создать приложение, которое планирует различные действия, такие как ходьба и бег, с помощью 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. Но я не хочу создавать его только для того, чтобы открыть страницу форм. Что я даже не уверен, что это возможно. Спасибо.
Это хорошее решение, как я уже сказал выше, ссылка: stackoverflow.com/questions/47459995/…
может сработать?





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