AlarmManager가 여러 장치에서 작동하지 않음
내 앱은 AlarmManager를 사용하며 4 년 전부터 작동하고 있습니다. 그러나 일부 장치에서 실패하기 시작했습니다.
Nexus 기기에서 완벽하게 작동하기 때문에 코드가 옳다고 확신합니다 (WakefulBroadcastReceiver 및 Doze가있는 기기에 대해 setExactAndAllowWhileIdle을 사용하고 있습니다).하지만 일부 제조업체 (Huawei, Xiaomi ...)의 기기에서는 실패합니다.
예를 들어 화웨이 기기에는 앱을 종료하는 일종의 배터리 관리자가 있으며 앱이 종료되면 예약 된 알람이 취소됩니다. 따라서 Huawei 배터리 관리자에서 앱을 "보호됨"으로 설정하면 문제가 해결됩니다.
하지만 최근에 Xiaomi, Samsung (새로운 "Smart Manager"와 관련이있을 수 있습니까?)과 같은 더 많은 장치에서 작동하지 않는 것으로 나타났습니다.이 동작이 표준이되는 것 같습니다 : 백그라운드 앱을 종료하는 것입니다.
누구든지 그것에 대해 알고 있습니까? 경보가 울리도록 할 방법이 있습니까?
편집 :이 문제는 다른 제조업체에서 추가 한 "배터리 세이버"로 인해 발생합니다. 여기에 더 많은 정보 : https://dontkillmyapp.com/
나는 이미 몇 주 동안 그것을 해결하려고 노력하고 있습니다. 나는 아무것도 찾지 못했다. 화웨이는 잠시 후 모든 경보를 죽입니다. 배터리 세이버에서 보호 된 앱에 앱을 추가하면 도움이되지 않습니다. 그러나 알람, 시계 또는 달력과 같은 단어를 포함하도록 앱의 패키지 이름을 변경하면 다른 장치와 마찬가지로 절대적으로 정상적으로 작동합니다. Google이이 쓰레기에 대한 인증을 제공하는 방법을 이해하지 못합니다. OEM은 이러한 방식으로 핵심 플랫폼을 수정해서는 안된다고 생각합니다. 나는 그들이 사용자가 그것을 사용하지 않을 때 얼마 후에 앱을 죽이는 자체 배터리 세이버를 가지고 있음을 이해합니다. 그러나 이것은 보호 된 앱에 대한 경보이기도합니다.
정확한 타이밍 알람에 대한 setAlarmClock ()도 도움이됩니다. 그러나 위젯 업데이트와 같은 생각에는 이것을 사용할 수 없습니다.
문제는 Smart Manager입니다. 삼성에는 때때로 특정 앱이 백그라운드에서 실행되는 것을 비활성화하는 배터리 관리자가 있습니다. 앱으로 돌아갈 때 "재개"를 시도했지만 응용 프로그램을 완전히 비활성화하거나 5 분마다 재개 할 수 있습니다 (삼성 기능에 따라 다름).
이것은 삼성 관리자가 없기 때문에 안드로이드의 재고 버전에서 작동합니다. SM을 활성화하는 몇 가지 기능이있는 Android의 사용자 지정 버전을 설치할 수도 있습니다 (ROM에 따라 다름).
대부분의 최신 Android 기기에는 배터리 절약 방법을 자동으로 알아 내려고 시도하는 앱 또는 메커니즘이 함께 제공되며 그 결과 특정 타사 앱이 종료 될 수 있습니다. 이로 인해 예약 된 작업 및 작업이 제거 될 수 있습니다 (예 : 알람이 울리지 않음, 푸시 알림이 작동하지 않음 등). 대부분의 경우 이것은 Android의 배터리 절약 메커니즘과 완전히 독립적으로 발생합니다. 제 경우에는 일부 장치 모델을 감지 할 때 더 많은 배터리를 최적화 할 수 없었습니다. 사용자를 시작 관리자로 리디렉션하여 내 애플리케이션을 허용 목록에 추가했습니다.
모든 모델에 대해이 링크에서 https://android-arsenal.com/details/1/6771 을 호출해야하는 인 텐트를 찾았습니다.
5.0 미만 장치에는 AlarmManager를 사용하고 5.0 이상 장치에는 JobScheduler를 사용하십시오. JobScheduler가 제조업체의 헛소리에 영향을받지 않을 것이라고 확신 할 수는 없지만 Android가 사람들을 AlarmManager에서 JobScheduler로 옮기려고한다는 점을 감안할 때 나에게는 훨씬 덜 보일 것입니다.
수정 : Google은 WorkManager 라는이 문제에 대한 자사 솔루션을 제공했습니다 . 여러 스케줄링 프레임 워크를 추상화하고 장치에 가장 적합한 프레임 워크를 사용합니다.
BOOT_COMPLETED를 듣고 있습니까? 장치가 재부팅되면 알람을 다시 설정해야합니다.
나는 또한 알람 을 설정하는 앱이 있습니다. 해결책은 api> = 21에서 AlarmManager.setAlarmClock () 을 사용하는 것입니다 . 이것은 졸음 afaik의 영향을받지 않으며 시스템 트레이에 알람 시계 아이콘을 넣는 추가 보너스가 있습니다.
요즘 대부분의 새로운 전화기는 당신이 설명한 것과 같은 일을하는 일종의 배터리 / 절전 관리자와 함께 번들로 제공됩니다. duboosters와 clean masters를 세지 않습니다.
제대로 작동하려면이 앱이 배터리 관리자 앱의 예외에 포함되어야한다는 내용의 면책 조항이나 FAQ를 앱 / 플레이 스토어 목록에 넣어야한다고 생각합니다.
이 기기에서 실행중인 Android 버전은 무엇입니까?
API 23부터 OS 자체는 한동안 사용하지 않으면 저전력 유휴 모드로 전환되며 해당 모드에서는 경보가 전달되지 않습니다. 그러나 앱에서 "배터리 사용량에 관계없이이 시간에 울리려면이 알람이 필요합니다"라고 명시 적으로 말할 수있는 방법이 있습니다. setAndAllowWhileIdle()
및 라는 새로운 AlarmManager 메서드 setExactAndAllowWhileIdle()
.
귀하의 설명에서 이것이 특정 OEM 장치에서 문제의 특정 원인이 아닌 것처럼 들리지만 이는 Alarm Manager를 사용하는 모든 개발자가 알아야 할 사항입니다.
마지막으로, 알람 관리자의 많은 사용은 작업 스케줄러의 메커니즘을 사용하여 더 잘 해결됩니다. 이전 버전과의 호환성을 위해 Play 서비스 "GCM Network Manager"는 기능면에서 실제로 작업 스케줄러와 매우 유사합니다. 즉, Android의 최신 버전에서 내부적으로 작업 스케줄러를 사용하며 클래스 이름에도 불구하고 반드시 네트워킹에 관한 것은 아닙니다.
앱을 죽이면 알람 관리자가 앱을 깨우지 못할 것이라고 생각합니다.
"강제 중지"하거나 앱을 비활성화하는 경우에만 알람 관리자로부터 콜백을받지 못합니다.
근본 원인은 다른 것일 수 있습니다.
또한 M에서 ... setExactAndAllowWhileIdle은 조절을 수행합니다. 즉, 2 분마다 알람을 예약하면 트리거되지 않습니다. ..15 분이 필요합니다. .
Xiaomi의 경우 앱에 대해 AutoStart를 활성화해야 할 수 있습니다. 백그라운드 프로세스에 영향을 미칠 수있는 Android 수정 (일반적으로 휴대폰 제조업체에서 제공) 목록을 작성하려고합니다. 새로운 것이 있으면 여기에 답변을 추가하십시오 Android 작업 킬러 목록
앱 관리자의 자동 시작 관리자, vivo v5와 같은 일부 핸드셋에서 앱을 활성화해야합니다.
In vivo v5에서는 iManager-> App Manager-> Auto Start Manager에서이 메뉴를 찾을 수 있습니다. 여기에서 앱을 활성화하십시오.
그러면 앱이 종료되거나 닫히면 알람 / 알람 관리자가 알람을 트리거합니다.
나는 대답을 찾고 있었고 몇 시간 후에 이것을 발견했습니다.
https://stackoverflow.com/a/35220476/3174791
이력서에서는 앱이 '보호 된 앱'에 의해 종료되었는지 확인하는 방법이며 이는 Huawei 장치에서만 작동합니다. 다른 장치 (삼성, 소니, 샤오 미 등)에 대한 솔루션이 있는지 알려주십시오.
조금 전에 AlarmManager 사용을 중단했습니다 ... 더 좋고 안정적인 대안
- 서비스 생성
- BOOT_COMPLETED에 대한 BroadcastReceiver 등록
- 수신기에서 서비스를 시작하십시오.
- 서비스 내에서 X 분마다 반복되는 새 핸들러를 시작합니다 ( Android-postDelayed () 호출을 사용하여 주기적으로 메서드 실행 ).
- 작업을 실행할 시간이되었는지 확인하십시오. now-실행 시간> 0 ( Java에서 두 날짜 간의 차이 기간을 찾는 방법은 무엇입니까? )
- 그렇다면 .. 작업을 실행하고 핸들러를 중지합니다.
그래 .. 고통 스럽지만 일은 끝났어 뭐든 상관 없어
참고URL : https://stackoverflow.com/questions/34729966/alarmmanager-not-working-in-several-devices
'program tip' 카테고리의 다른 글
재귀 생성자 호출이 잘못된 C # 코드를 컴파일하는 이유는 무엇입니까? (0) | 2020.10.06 |
---|---|
드로어 블 -hdpi, 드로어 블 -mdpi, 드로어 블 -ldpi Android (0) | 2020.10.06 |
Eclipse에서 자동 완성을 트리거하는 스페이스 바 키 누르기를 중지합니다. (0) | 2020.10.06 |
Understanding java.lang.Thread.State: WAITING (parking) (0) | 2020.10.06 |
Schema.org 마크 업 테스트 도구 (0) | 2020.10.06 |