본문 바로가기
Android

안드로이드 Doze(도즈)모드 진입 시 백그라운드 및 알림서비스 제한 이슈 해결

by 일용직 코딩노동자 2020. 4. 16.
728x90
반응형

우선 안드로이드 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를 진행합니다.

 

이렇게 도즈모드에 빠지지 않도록 해봤는데요.

 

구글 플레이 스토어에 업로드 하실때 화이트리스트같은 경우 조건이 있다고해요.

 

https://developer.android.com/training/monitoring-device-state/doze-standby.html?authuser=1#understand_app_standby

 

잠자기 및 앱 대기 모드에 맞게 최적화하기  |  Android 개발자  |  Android Developers

앱에서 Android 6.0의 절전 기능을 테스트하고 최적화합니다.

developer.android.com

해당 페이지 맨 아래부분에 그에대한 설명이 나와있으니 참고해보시는것도 좋을것같습니다.

 

하나 더 방법은 FCM을 이용하는 것입니다.

 

https://onedaycodeing.tistory.com/24

 

FCM 파이어베이스 포그라운드 백그라운드 알림 및 백그라운드 작업처리

저번 게시글에 있던 소스코드는 단순히 푸시알림을 받기만 하면 되는 코드였습니다. 이번 코드는 웹에서 통해 보내주는 제이슨 형식의 푸시알림을 변경하여 포그라운드 및 백그라운드 푸시알림 + 백그라운드 알림..

onedaycodeing.tistory.com

해당 게시글을 참조하시면 됩니다.

 

단! 여기서 주의하셔야 할 사항은

 

웹딴 서버에서 보내실때

 

제가 적어놓은 

 

"data":{
	"title" : "aaa",
	"body" : "bbb",
	"channel_id : "Notice"
	},

이부분에서

 

priority:"high"
"data":{
	"title" : "aaa",
	"body" : "bbb",
	"channel_id : "Notice"
	},

이렇게 "high"를 전송하여 우선순위를 설정해주셔야 합니다.

728x90
반응형

댓글