Уведомление не отображается, поскольку диспетчер служб или аварийных сигналов отключен - PullRequest
0 голосов
/ 10 января 2019

У меня проблема, я не могу обернуть голову, сегодня я потратил 7 часов, пытаясь найти решение. Я пытаюсь отобразить уведомление для моего приложения. Он отлично работает на старых устройствах с более старыми версиями ОС, однако в Note 8 под управлением Oreo API 27 мои уведомления не отображаются. Я потратил много часов на тестирование и обнаружил проблему: во время работы приложения и его открытия будет отображаться уведомление, однако при выходе из приложения уведомления не отображаются. Поэтому я решил, что это как-то связано с тем, как система обрабатывает сервисы.

Это нормальное поведение? Есть ли способ обойти это?

Это мой код для уведомления:

onCreate...
 if (settings.getBoolean("enabled", true)) {
            if (settings.getLong("lastRun", Long.MAX_VALUE) < System.currentTimeMillis() - mTimeDelay) {
                sendNotification();
            }
        }

        setAlarm();
        stopSelf();
}
  public void setAlarm() {

        Intent serviceIntent = new Intent(this, CheckRecentRun.class);
        PendingIntent pi = PendingIntent.getService(this, 131313, serviceIntent, PendingIntent.FLAG_CANCEL_CURRENT);

        AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + mTimeDelay, pi);
        //Alarm is set for 3 days
    }

    public void sendNotification() {
        Intent intent = new Intent(this, WelcomeActivity.class);
        NotificationManager notificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);



        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
            NotificationChannel mChannel = notificationManager.getNotificationChannel(channelId);
            if (mChannel == null) {
                mChannel = new NotificationChannel(channelId, channelName, importance);
                mChannel.setDescription(mNotificationText);
                mChannel.enableLights(false);
                mChannel.setLightColor(Color.GREEN);
                mChannel.setShowBadge(false);
                notificationManager.createNotificationChannel(mChannel);
            }
        }

        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this, channelId).setStyle(new NotificationCompat.BigTextStyle().bigText(mNotificationText)).setSmallIcon(R.mipmap.ic_launcher).setContentTitle(mAppName).setContentText(mNotificationText).setDefaults(Notification.DEFAULT_SOUND).setAutoCancel(false);

        TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
        stackBuilder.addNextIntent(intent);
        PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(mNotificationCode, PendingIntent.FLAG_UPDATE_CURRENT);
        mBuilder.setContentIntent(resultPendingIntent);

        notificationManager.notify(notificationId, mBuilder.build());
    }

1 Ответ

0 голосов
/ 10 января 2019

Это может быть агрессивное поведение Samsung по управлению батареями (среди многих других брендов, таких как Huawei) на своих новых телефонах, убивающее ваше приложение.

Проверьте этот сайт: https://dontkillmyapp.com/

И посмотрите на заметки под Samsung:

Galaxy S8 и выше С представлением своего флагмана Galaxy S8 (и с некоторыми более ранними экспериментами) Samsung представила неудачную попытку продлить срок службы батареи под названием App power monitor.

Чтобы приложения работали правильно, внесите их в белый список на мониторе питания приложений.

Как это сделать:

Откройте «Настройки»> «Обслуживание устройства»> «Аккумулятор», и внизу вы увидите список наиболее часто используемых приложений. Вы можете управлять приложениями по отдельности или в группе, выбрав их и нажав большую кнопку «Сохранить». Спящие приложения появятся в списке спящих приложений внизу (коснитесь его, чтобы развернуть список). Прокрутите дальше - вплоть до самого дна - и вы найдете Unmonitored приложения. Это приложения, которые вы специально хотите исключить (белый список) из злой досягаемости монитора приложений.

Находясь в меню «Необслуживаемые приложения», вы можете нажать 3-точечное меню, чтобы добавить или удалить приложения из списка. Вместо того, чтобы беспокоиться об этом, вы можете просто полностью отключить функцию контроля питания приложения, так как она практически не влияет на время автономной работы и только мешает нормальному функционированию вашего телефона Galaxy.

Это чрезмерно, а в некоторых случаях просто вводит в заблуждение, используя тактику запугивания, чтобы вы зависели от программного обеспечения Samsung, когда другие устройства Android прекрасно обходятся без него.

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

Если ваш код работает на других устройствах или в вашем эмуляторе, это должно быть проблемой.

...