Intereting Posts
Parse JSON-объект со строкой и значением Запрос IN запроса поставщика контента для Android Войдите в систему через веб-службу Restore через android, не используя Объединить несколько приложений в одном приложении Как взаимодействовать с BadgeProvider на телефонах Samsung, чтобы добавить счет к значку приложения? Как остановить телефонный звонок при вызове, но не отключить его в глобальном масштабе Наследование фрагментов Android Как преобразовать имена цветов в эквивалентный шестнадцатеричный код? Есть ли альтернатива JQuery для JQTouch с лучшей поддержкой Android? Android NDK получает ошибку ArrayList Увеличение яркости и контрастности изображения после захвата с камеры в андроиде Как управлять сеансом для пользователя, зарегистрированного в мобильном приложении на PHP? Резервные копии дубликатов Android Как получить подробную информацию о стороннем приложении в Android? Внедрение события shake

AlarmManager не работает на устройствах Samsung в Lollipop

Я разрабатываю приложение, которое использует AlarmManager для установки будильников (обычно около 50), которые необходимо уволить в определенное время в течение года. Это код, который я использую с тех пор, как 4.4 kitkat изменил AlarmManager.

AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); long setDate = fireDate.getTime(); // it's a calendar date defined above Intent intent = new Intent(LOCAL_DISPLAY_MESSAGE_ACTION); PendingIntent pending = PendingIntent.getBroadcast(ctx, id, intent, PendingIntent.FLAG_UPDATE_CURRENT); if (Build.VERSION.RELEASE.startsWith("6")) { am.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, setDate, pending); } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){ am.setExact(AlarmManager.RTC_WAKEUP, setDate, pending); } else { am.set(AlarmManager.RTC_WAKEUP, setDate, pending); } 

Помимо кода выше, я использую широковещательный приемник, правильно определенный в манифесте.

 public class LocalReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { PushWakeLocker.acquire(context); // do some stuff PushWakeLocker.release(); } } 

Больше информации может помочь.

 <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="19" /> 

Поскольку несколько месяцев назад я получал плохие отзывы только от устройств Samsung (версия 5.0 / 5.1 android), которые вообще не получают своих локальных уведомлений. Я имею в виду, что это не срабатывает, кажется, что устройство пропускает его или не просыпается.

В тестах, в основном с Samsung S4 с 5.0.1, я всегда получаю сигналы тревоги вовремя, так что это сводит меня с ума. FYI этот код всегда работал очень хорошо.

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

Я ценю ваше время, и любое предложение приветствуется!

Ваша проблема (или кошмар) – это Samsung Smart Manager . Это приложение поставляется с предустановленными всеми телефонами Samsung с 2015 года и должно дезактивировать неиспользуемые приложения. «Как он узнает, какие приложения не используются?» Вы можете спросить – просто:

Каждое приложение, которое не было запущено пользователем в течение 3 дней, деактивируется.

Все остальные записи AlarmManager – конечно же – также удаляются. Вы можете прочитать об этом на своих «форумах разработчиков». Не стесняйтесь следовать здесь или здесь, пока эти потоки не будут удалены персоналом. Я еще не видел, чтобы кто-то из Samsung ответил на эту тему.

Единственный способ «исправить» это сообщить пользователям вашего приложения о ситуации и показать им, как использовать белый список вашего приложения в Smart Manager. Нам нужно было настроить веб-сайт с пошаговыми инструкциями, показывающими, как это сделать для наших пользователей.

Вы можете подумать о настройке фоновой службы или вызове AlarmManager каждые шесть часов или около того – ни один из этих хаков не будет работать.