Есть сервис, по расписанию качает новости, после загрузки отправляет уведомление - 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
Комментариев нет:
Отправить комментарий