Как создать минимизированное текущее уведомление, такое как USB-соединение или Google Weather - PullRequest
0 голосов
/ 04 февраля 2019

Я разрабатываю приложение Xamarin.Android, которое использует Foreground Service для отслеживания местоположения пользователя после определенного времени / расстояния.

Для поддержания работоспособности службы у меня есть текущее уведомление с низким приоритетом, а также канал уведомлений с низким приоритетом.Я пробовал все виды комбинаций (низкие и минимальные приоритеты и текстовые сообщения).

Код канала уведомления:

private NotificationChannel CreateNotificationChannel(string channelId)
{
    if (Build.VERSION.SdkInt < BuildVersionCodes.O)
    {
        return null;
    }
    string channelName = Resources.GetString(Resource.String.notification_channel_name);
    string channelDesc = Resources.GetString(Resource.String.notification_channel_desc);
    NotificationChannel notificationChannel = new NotificationChannel(channelId, channelName, NotificationImportance.Default)
    {
        Description = channelDesc
    };
    switch(channelId)
    {
        case UPDATES_NOTIFICATION_CHANNEL_ID: 
            notificationChannel.Importance = NotificationImportance.High;
            break;
        case ONGOING_NOTIFICATION_CHANNEL_ID:
            notificationChannel.Importance = NotificationImportance.Low;
            break;
        default:
            break;
    }
    var notifManager = (NotificationManager)GetSystemService(NotificationService);
    notifManager.CreateNotificationChannel(notificationChannel);
    return notificationChannel;
}

Код уведомления:

private Notification CreateOngoingNotification()
{
    Intent notificationIntent = new Intent(this, typeof(MainActivity));
    PendingIntent pendingIntent =
        PendingIntent.GetActivity(this, 0, notificationIntent, 0);
    string content = "The application is fetching your location every " + MIN_TIME / (60 * 1000) + " minutes if you moved at least " + MIN_DISTANCE + " meters.";
    NotificationCompat.Builder builder;
    if (Build.VERSION.SdkInt < BuildVersionCodes.O) builder = new NotificationCompat.Builder(this);
    else builder = new NotificationCompat.Builder(this, m_ongoingNotificationChannel.Id);
    builder
            .SetContentTitle("Persistent notification")
            .SetStyle(new NotificationCompat.BigTextStyle().BigText(content))
            .SetSmallIcon(Resource.Drawable.ic_notification)
            .SetContentIntent(pendingIntent)
            .SetGroup("persistent")
            .SetOngoing(true)
            .SetVisibility((int)NotificationVisibility.Private)
            .SetPriority((int)NotificationPriority.Low);
    Notification notification = builder.Build();
    return notification;
}

ИмеяНа следующем изображении я пытаюсь соответствовать стилю уведомлений из приложения LinkedIn, одного Google Weather (внизу) и другого (3-го, начиная с конца).

ВсеЯ могу получить это с «Постоянное уведомление» в заголовке.

THIS

Любая помощь будет приветствоваться!

РЕДАКТИРОВАТЬ: ясно, что яиспользую Xamarin, а не Java

1 Ответ

0 голосов
/ 04 февраля 2019

Если я не ошибаюсь, и вы ищете расширяемое уведомление

Базовое уведомление обычно включает заголовок, строку текста и одно или несколько действийПользователь может выполнить в ответ.Чтобы предоставить еще больше информации, вы также можете создавать большие расширяемые уведомления, применяя один из нескольких шаблонов уведомлений.

Теперь, если вы внимательно прочитаете документы, у него есть все различные типы расширяемых уведомлений,

Вы ищете либо Add a large block of text, либо Create an inbox-style notification

Оба кода, приведенные в документации, легко конвертируются в C #, т.е. Xamarin.Android

В случаеВы сталкиваетесь с проблемами или у вас есть вопросы, которые вы можете вернуть

Goodluck

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...