Попробуйте отобразить уведомление с помощью xamarin - PullRequest
0 голосов
/ 27 сентября 2019

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

https://github.com/Estimote/Xamarin-Bindings

Я скачал папку ExampleApp из github и установил Estimote.Android.Proximity.Это работает нормально.

Но это моя проблема:

//ExampleApps/Example.Android.Proximity/MainActivity.cs

class MyEnterHandler : Java.Lang.Object, Kotlin.Jvm.Functions.IFunction1
    {
        public Java.Lang.Object Invoke(Java.Lang.Object p0)
        {
            IProximityZoneContext context = (IProximityZoneContext)p0;

            Log.Debug("app", $"MyEnterHandler, context = {context}");

            return null;
        }
    }

Вместо Log.Debug я хочу создать свое Уведомление .. Как я могу это сделать?

Я попытался создать уведомление с помощью этого сценария:

 if (Build.VERSION.SdkInt >= BuildVersionCodes.O)
        {
            // Android 8.0 and up require a channel for the notifications
            var channel = new NotificationChannel(channelId, "Bluetooth activity", NotificationImportance.Low);
            var notificationManager = this.GetSystemService(Context.NotificationService) as NotificationManager;
            notificationManager.CreateNotificationChannel(channel);
        }
        var notification = new NotificationCompat.Builder(this, channelId)
                .SetSmallIcon(global::Android.Resource.Drawable.IcDialogInfo)
                .SetContentTitle("Proximity")
                .SetContentText("Proximity demo is scanning for beacons")
                .Build();

Но у меня проблема с this.getSystemService (у меня нет контекста в "классе MyEnterHandler")

1 Ответ

0 голосов
/ 27 сентября 2019
  • создать канал уведомлений
void CreateNotificationChannel()
        {
            if (Build.VERSION.SdkInt < BuildVersionCodes.O)
            {
                return;
            }

        var channel = new NotificationChannel(CHANNEL_ID, Resources.GetString(Resource.String.app_name), NotificationImportance.Default)
        {
            Description = ""
        };

        var notificationManager = (NotificationManager)GetSystemService(NotificationService);
        notificationManager.CreateNotificationChannel(channel);
    }
  • использовать диспетчер уведомлений для отправки уведомления
var pendingIntent = PendingIntent.GetActivity(this, MainActivity.NOTIFICATION_ID, intent, PendingIntentFlags.OneShot);

            var notificationBuilder = new NotificationCompat.Builder(this, MainActivity.CHANNEL_ID)
                                      .SetSmallIcon(Resource.Drawable.outline_message_24)
                                      .SetContentTitle(Resources.GetString(Resource.String.app_name))
                                      .SetContentText(messageBody)
                                      .SetAutoCancel(true)
                                      .SetContentIntent(pendingIntent);

            var notificationManager = NotificationManagerCompat.From(this);
            notificationManager.Notify(MainActivity.NOTIFICATION_ID, notificationBuilder.Build());
...