Android: уведомление не появляется на экране, только значок в строке состояния Oreo

Хороший способ получить секунды с эпохи - это сделать это явно. Эта функция преобразует timestring в наивную datetime, сообщает часовой пояс datetime, а затем вычитает datetime, которая является эпохой в UTC.

Код:

import datetime as dt
from pytz import timezone

def convert_timestamp_to_utc_epoch(ts, tz_info):
    # convert timestamp string to naive datetime
    naive = dt.datetime.strptime(ts, '%Y-%m-%d %H:%M:%S')

    # assign proper timezone to datetime
    aware = tz_info.localize(naive)

    # get a datetime that is equal to epoch in UTC
    utc_at_epoch = timezone('UTC').localize(dt.datetime(1970,1,1))

    # return the number of seconds since epoch
    return (aware - utc_at_epoch).total_seconds()

Тестовый код:

Используя пример из вопроса:

print('CET:',
    convert_timestamp_to_utc_epoch('2017-02-22 17:04:06', timezone('CET')))

Результаты:

CET: 1487779446.0

Получить произвольный локальный часовой пояс:

Если вы не уверены, какой часовой пояс используется локальной машиной, библиотеку tzlocal можно использовать как:

from tzlocal import get_localzone
local_tz = get_localzone()
print('Local:', 
    convert_timestamp_to_utc_epoch('2017-02-22 17:04:06', local_tz))
print('Pacific:', 
    convert_timestamp_to_utc_epoch('2017-02-22 17:04:06', timezone('US/Pacific')))

Результаты:

Local: 1487811846.0
Pacific: 1487811846.0
1
задан Mickael Belhassen 25 March 2019 в 09:40
поделиться

1 ответ

Вам необходимо уведомить менеджера уведомлений о вашем уведомлении. Я разработал метод генерации уведомлений для Oreo или верхнего SDK.

Вызовите этот метод с правильными аргументами в вашем коде ...

//This method is for Oreo
    @RequiresApi(api = Build.VERSION_CODES.O)
    public static void createSimpleNotificationForOreo(Context context, PendingIntent pendingIntent, String notificationTitle, String notificationContent, int notificationId, String notificationChannelId) {
        Notification.BigTextStyle bigText = new Notification.BigTextStyle();
        bigText.bigText(notificationContent);
        bigText.setBigContentTitle(notificationTitle);
        Notification.Builder notificationBuilder = new Notification.Builder(context)
                .setSmallIcon(R.drawable.ic_small_notification)
                .setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_launcher))
                .setColor(context.getResources().getColor(R.color.colorPrimary))
                .setContentText(notificationContent)
                .setStyle(bigText)
                .setChannelId(notificationChannelId)
                .setContentIntent(pendingIntent);

        Notification notification = notificationBuilder.build();
        notification.flags |= Notification.FLAG_AUTO_CANCEL;
        notification.defaults |= Notification.DEFAULT_SOUND;
        notification.defaults |= Notification.DEFAULT_VIBRATE;
        NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        NotificationChannel mChannel = new NotificationChannel(notificationChannelId, NOTIFICATION_CHANNEL_NAME, NotificationManager.IMPORTANCE_HIGH);
        if (notificationManager != null) {
            notificationManager.createNotificationChannel(mChannel);
            notificationManager.notify(notificationId, notification);
        }
    }
0
ответ дан Sayan Mukherjee 25 March 2019 в 09:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: