Страницы

Поиск по вопросам

среда, 22 мая 2019 г.

не отправляется Notification

Есть сервис, по расписанию качает новости, после загрузки отправляет уведомление - Notification. В последнее время начал замечать что сервис отрабатывает, однако уведомление не отправляет. Повесил логи в аналитику, метод отправки сообщения вызывается - однако сообщение не доходит (Причем может через раз отправлять, может день не отправлять а потом день все нормально). Что может быть не так, код прилагается.
public void sendMessage(int countNews){ Resources resources = getResources(); Intent i = NewsListActivity.newIntent(this); PendingIntent pi = PendingIntent.getActivity(this, 1, i, 0);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) .setTicker(resources.getString(R.string.get_new_news)) .setSmallIcon(R.drawable.ic_notif_logo) .setLargeIcon(BitmapFactory.decodeResource(res, R.mipmap.ic_launcher)) .setNumber(countNews) .setContentTitle(resources.getString(R.string.get_new_news)) .setContentText(resources.getQuantityString(R.plurals.news_plurals, countNews, countNews)) .setContentIntent(pi) .setAutoCancel(true);
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this); notificationManager.notify(1, mBuilder.build()); }
Не может это быть из-за того что PendingIntent у Notification по requestCode совпадает с PendingIntent сервиса - последний для периодического запуска через AlarmManager
чтобы не пересекались ID у PendingIntent исправил код:
public void sendMessage(int countNews){ Resources resources = getResources(); Intent i = NewsListActivity.newIntent(this); PendingIntent pi = PendingIntent.getActivity(this, NOTIFICATION_INTENT_ID, i, PendingIntent.FLAG_CANCEL_CURRENT);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) .setTicker(resources.getString(R.string.get_new_news)) .setSmallIcon(R.drawable.ic_notif_logo) .setLargeIcon(BitmapFactory.decodeResource(resources, R.mipmap.ic_launcher)) .setNumber(countNews) .setContentTitle(resources.getString(R.string.get_new_news)) .setContentText(resources.getQuantityString(R.plurals.news_plurals, countNews, countNews)) .setContentIntent(pi) .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)) .setAutoCancel(true);
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this); notificationManager.notify(NOTIFICATION_ID, mBuilder.build()); }
сутки сообщения отправлялись отлично, все работало, ночью новости скачались - сообщения нет, днем еще подгрузились - опять сообщение не пришло. Как будто аппарат очень крепко "уснул" и не принимает уведомления... Причем на втором аппарате с Android 5.1 уведомления приходят - на Android 6.0 вышеописанная картина.


Ответ

С 6 андроида из-за Doze для точных уведомлений следует использовать методы:
If you need to set alarms that fire while in Doze, use setAndAllowWhileIdle() or setExactAndAllowWhileIdle(). https://developer.android.com/training/monitoring-device-state/doze-standby.html

Комментариев нет:

Отправить комментарий