우선 안드로이드 6.0이상의 버전부터는 Doze모드라는 새로운 모드가 생겼습니다.
쉽게 말하면 절전모드 같은것입니다.
이 도즈모드라는거에 진입하는 조건은
1. 배터리가 충전중이 아닐것
2. 휴대폰이 제자리에 계속 놓여진 상태일것
3. 화면이 꺼진상태로 일정시간 지속되어있을것
3개의 조건이 된다면 도즈모드에 진입하게됩니다.
이 모드에 진입한다면 각종 백그라운드 서비스가 제한됩니다.
결국 이 도즈모드에 진입을 막기위한 방법을 찾다가 화이트리스트 라는것을 찾았습니다.
이 화이트리스트에 등록을 한다면 도즈모드 대상으로부터 제외됩니다.
화이트모드에 진입하는 시간은 제조사별로 다 다르다고합니다.
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
public void Whitelist_Check(){
/**
* 안드로이드 6.0 이상 (API23) 부터는 Doze모드가 추가됨.
* 일정시간 화면이꺼진 상태로 디바이스를 이용하지 않을 시 일부 백그라운드 서비스 및 알림서비스가 제한됨.
* 6.0이상의 버전이라면 화이트리스트에 등록이 됐는지 Check
*/
PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
boolean WhiteCheck = false;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
/**
* 등록이 되어있따면 TRUE
* 등록이 안되있다면 FALSE
*/
WhiteCheck = powerManager.isIgnoringBatteryOptimizations(mContext.getPackageName());
/** 만약 화이트리스트에 등록이 되지않았다면 등록을 해줍니다. **/
if(!WhiteCheck){
Log.d("화이트리스트","화이트리스트에 등록되지않았습니다.");
Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
intent.setData(Uri.parse("package:"+ mContext.getPackageName()));
mContext.startActivity(intent);
}
else Log.d("화이트리스트","화이트리스트에 등록되어있습니다.");
}
}
PowerManager를 이용하여 현재 이 앱이 화이트리스트에 등록이 됬는지 안됬는지 판단이 가능합니다.
WhiteCheck변수에서 true값이라면 화이트리스트에 등록이 된것이고, false라면 등록이 되지않은것입니다.
밑에 if문에 보시면 if(!WhiteCheck) 조건이있습니다.
! <-- not 조건이므로 true -> false / false -> true로 변경해줍니다.
만약 등록이 되지않았다면 등록을 진행해주는 Intent를 진행합니다.
이렇게 도즈모드에 빠지지 않도록 해봤는데요.
구글 플레이 스토어에 업로드 하실때 화이트리스트같은 경우 조건이 있다고해요.
해당 페이지 맨 아래부분에 그에대한 설명이 나와있으니 참고해보시는것도 좋을것같습니다.
하나 더 방법은 FCM을 이용하는 것입니다.
https://onedaycodeing.tistory.com/24
해당 게시글을 참조하시면 됩니다.
단! 여기서 주의하셔야 할 사항은
웹딴 서버에서 보내실때
제가 적어놓은
"data":{
"title" : "aaa",
"body" : "bbb",
"channel_id : "Notice"
},
이부분에서
priority:"high"
"data":{
"title" : "aaa",
"body" : "bbb",
"channel_id : "Notice"
},
이렇게 "high"를 전송하여 우선순위를 설정해주셔야 합니다.
'Android' 카테고리의 다른 글
안드로이드 바로가기 아이콘 생성하기 오레오 이상/이하 호환. (0) | 2020.04.20 |
---|---|
Doze모드에 강제로 진입하여 테스트해보기. (0) | 2020.04.16 |
WebView 현재 페이지가 로딩이 됐는지 알아보는 방법. (0) | 2020.04.14 |
안드로이드 공유하기 기능으로 해당 앱 실행 후 원하는 페이지로 이동. (4) | 2020.03.31 |
안드로이드 8.0이상의 버전 Notification 및 버전별 처리 (0) | 2020.03.24 |
댓글