Xamarin.Android: при нажатии на уведомление все приложение становится пустым - PullRequest
0 голосов
/ 24 сентября 2019

Мой Xamarin. При уведомлении Android все приложение становится пустым при нажатии.У меня typeof установлено значение Fragment, что привело к тому, что уведомление вообще не запускало мое приложение.

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

        public static int _count = 0;

        public async void SendNotifications()
        {
            await Task.Run(() =>
            {

                var _ctx = Android.App.Application.Context;

                //I've also tried setting the bundle to MainActivity existing bundle with no change
                //Bundle _bundle = MainActivity._bundle;

                var valuesForActivity = new Bundle();
                valuesForActivity.PutInt(MainActivity.COUNT_KEY, _count);
                //I'd eventually like to pass a url string foreach notification but have
                // disabled this line for the sake of simplicity.
                //valuesForActivity.PutString(_main._notificationString, "https://bitchute.com/subscriptions/");

                // When the user clicks the notification, MainActivity will start up.
                // This line works, but it causes the app to go blank
                var resultIntent = new Intent(_ctx, typeof(MainActivity));

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

                // Construct a back stack for cross-task navigation:
                var stackBuilder = Android.Support.V4.App.TaskStackBuilder.Create(_ctx);
                //stackBuilder.AddParentStack(Class.FromType(typeof(MainActivity)));
                stackBuilder.AddNextIntent(resultIntent);

                _fm5.GetPendingIntent();

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

                foreach (var note in ExtNotifications._customNoteList)
                {
                    // Build the notification:
                    var builder = new Android.Support.V4.App.NotificationCompat.Builder(_ctx, MainActivity.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(note._noteType) // Set the title
                                  .SetNumber(_count) // Display the count in the Content Info
                                  .SetSmallIcon(Resource.Drawable.bitchute_notification2) // This is the icon to display
                                  .SetContentText(note._noteText);

                    // Finally, publish the notification:
                    var notificationManager = Android.Support.V4.App.NotificationManagerCompat.From(_ctx);
                    notificationManager.Notify(MainActivity.NOTIFICATION_ID, builder.Build());

                    _count++;
                }
            });
        }                                                

Текст уведомления генерируется из этого кода:

https://github.com/hexag0d/BitChute_Mobile_Android_BottomNav/blob/CookieShare/Classes/ExtNotifications.cs

Что я действительно хотел бы сделать, это загрузить URL-адрес в один из моих фрагментов, передав его вуведомление, но на первом этапе мое приложение не гаснет при нажатии на уведомление;Может кто-нибудь сказать мне, что я здесь не так сделал?

Кроме того, я не использую firebase;Я просто использую API уведомлений vanilla Android и предпочел бы сделать его как можно более простым.

РЕДАКТИРОВАТЬ: я забыл упомянуть, что я также пытался установить android:launchMode="singleInstance" в манифесте приложения кака также singleTop и другие.Это не сработало.

1 Ответ

0 голосов
/ 24 сентября 2019

Вам действительно нужно инициировать действие в ожидаемом намерении, не создавая другой поток задач, чтобы ваш метод SendNotification выглядел следующим образом:

void SendNotification(string messageBody)
{
try
{
    var intent = new Intent(this, typeof(MainActivity));
    intent.AddFlags(ActivityFlags.ClearTop);
    var pendingIntent = PendingIntent.GetActivity(this, 0, intent, PendingIntentFlags.OneShot);

    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
        .SetSmallIcon(Resource.Drawable.ic_stat_ic_notification)
        .SetContentTitle("Title")
        .SetContentText(messageBody)
        .SetAutoCancel(true)
        .SetContentIntent(pendingIntent);

    NotificationManagerCompat notificationManager = NotificationManagerCompat.From(this);
    notificationManager.Notify(0, notificationBuilder.Build());
}
catch (Exception ex)
{

}
}

Как только вы это сделаете, вы можете просто вызвать свой фрагмент из этого действияиспользуя какой-либо флаг, такой как булево

...