http://www.kmshack.kr/2016/04/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%95%B1-%EB%B0%B0%ED%84%B0%EB%A6%AC-%EC%B5%9C%EC%A0%81%ED%99%94-%EB%AC%B4%EC%8B%9C%EB%B0%A9%EB%B2%95/


안드로이드 앱 배터리 최적화 무시방법

안드로이드 마시멜로에서 앱이 백그라운드로 처리하는 작업을 막아 배터리 소모를 줄이는 최적화 기능이 들어있다. 배터리 소모를 줄이는 것도 좋지만 앱의 작동에 문제가 되는 경우를 흔치 않게 보여지고 있다. 예를 들어 스마트와치와 연결하는 구글의 안드로이드 웨어의 경우 배터리 최적화모드로 인해 블루투스간의 페이링 연결이 끊겨버리는 문제가 발생한다.

구글도 이러한 문제로 인해 최근 배터리 최적화 목록에 안드로이드 웨어앱을 무시할 수 있는 간편한 설정기능을 넣어두었으며 설정하지 않으면 지속적으로 나타나 설정해야 연결이 끊기지 않는다는 안내를 지속적으로 하게끔 업데이트 되었다.

wear_doze_setting

일반적으로 구글의 레퍼런스 폰인경우 설정 > 배터리 > 배터리 최적화에서 설정을 해야하며, 제조사별로 메뉴위치나 네이밍이 달라서 사용자들이 직접 설정하기는 힘든 부분이다. 그렇기 때문에 안드로이드 웨어앱은 자체적으로 다이얼로그를 통해 설정기능을 넣었다.

 

어떻게?

안드로이드 API 23에 배터리 최적화를 앱에서 직접제어 할 수 있는 퍼미션이 추가 되었다.
android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS

 

해당 퍼미션 권한이 있으면 배터리 최적화설정을 해당앱의 권한으로 직접 설정 할 수 있다. 설정하는 방법은 Package이름과 설정 액션을 보내면된다.
API Level 23에서 추가된 PowerManager.isIgnoringBatteryOptimizations()를 이용하여 해당앱이 배터리 최적화 상태인가를 확인 할 수 있다. 그리고 ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 액션을 이용하여 배터리 최적화를 무시할 수도 있다. 반대로 최적화 모드를 수행하기 위해서는 ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 액션을 사용하면된다.

 

예제)

Intent i = new Intent();

String packageName = getPackageName();
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);

if (pm.isIgnoringBatteryOptimizations(packageName){
 i.setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
} else {
 i.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
 i.setData(Uri.parse("package:" + packageName));
}
startActivity(i);

무시하는 액션을 수행하면 다이얼로그를 통해 사용자가 직접 배터리 최적화 무시를 할 수 있다.

 

배터리 최적화 모드로 앱의 정상작동에 문제가 된다면 앱에서 직접 배터리 최적화를 무시할 수 있도록 액션을 요청하여 다이얼로그를 통해 안내해주는 것도 하나의 방법이 될것 같다. 단, 퍼미션 추가로 부담은 있겠지만 앱이 정상작동하지 않는것 보다는 감수해볼만한 사항이다.

 

  • 2016/4/29 추가
    REQUEST_IGNORE_BATTERY_OPTIMIZATIONS을 사용하는 경우 안드로이드 플레이 스토어에서 승인을 안해주세요. 진짜 필요로하는 앱의 경우에만 승인이 가능하며 일반적으로 리젝될듯 합니다.

“안드로이드 앱 배터리 최적화 무시방법”에 대한 3개의 생각