Я создал службу переднего плана, используя следующий код, который находится в методе переопределения OnStartCommand внутри класса службы с именем DemoIntentService.cs.
base.OnStartCommand(intent,flags,startId);
if (Build.VERSION.SdkInt >= BuildVersionCodes.O)
{
Intent notificationIntent = new Intent(this, Java.Lang.Class.FromType(typeof(DemoIntentService)));
PendingIntent pendingIntent = PendingIntent.GetActivity(this, 0, notificationIntent, 0);
Notification.Builder notificationBuilder = new Notification.Builder(this, "Example_Service_Channel")
.SetSmallIcon(Resource.Drawable.AlertLightFrame)
.SetContentTitle(Resources.GetString(Resource.String.DialogAlertTitle))
.SetContentText(Resources.GetString(Resource.String.SelectTextMode))
.SetContentIntent(pendingIntent);
Notification notificationAfterBuild = notificationBuilder.Build();
StartForeground(123, notificationAfterBuild);
InitializeAlarmManager();
setAlarm();
}
return StartCommandResult.RedeliverIntent;
Очевидно, что приведенный выше код предназначен только для Android Oreo 8.0 и выше, сервис работает нормально, и уведомление не будет очищено, даже если я закрою приложение вручную. (Это хорошо, это то, что я хочу!). Тем не менее, когда я использую приведенный выше код для тестирования на Android Nougat 7.1.1, он не будет работать.
Во-первых, я исследовал в Интернете, они сказали, что нет необходимости создавать канал уведомлений для Android ниже 8.0, поэтому я удаляю "Example_Service_Channel", который является ID канала. Приложение было успешно развернуто, но уведомление исчезло, когда я убил его. Во-вторых, когда я удалил идентификатор канала, Xamarin выдал мне предупреждение «Notification.Builder.Builder (Context) устарел: устарел», и строка стала желтой. Я игнорирую ошибку и развертываю приложение. Служба работала так, как это видно в работающей службе внутри параметров разработчика. Но когда я убил приложение, сервис и уведомление ушли вместе. Есть ли другой способ создать службу уведомлений переднего плана, которая никогда не закончится для Android ниже 8.0? Спасибо за любые комментарии и идеи.