티스토리 뷰

 

안드로이드에서는 배터리 상태에 대한 값을 계속해서 불러오는것을 권장하지 않는다.

 

이러한 행동 자체가 배터리 소모가 크기 때문이다.

 

그래서 배터리가 낮아졌을때 (보통 20%이하) 그보다 높을때로 구분하여 동작하기를 권장한다.

 

그렇다면 어떻게하면 배터리가 낮을때와 보통이 되었을 때를 알 수 있을까?

 

이는 안드로이드 Developer에 자세히 나와있지만, 사용법에 대해서 햇갈릴 수 있으니 내가 사용한 방법을 올려보겠다.

 

나는 receiver로 등록하여, 배터리의 변경 상태가 들어오면 그때에 receiver에서 내가 원하는 동작하도록 설계하였다.

 

전 게시글인 통화 상태 확인하는 broadcast와 동일한 곳에서 작동하게 만들었다.

 

2020/03/18 - [인턴/안드로이드] - 안드로이드 전화 받기, 전화 끊기, 통화 상태보기 (answerCall, endCall)

 

1. manifests에 등록한다.

 

        <receiver android:name=".CallReceiver">
        <intent-filter>
            <action android:name="android.intent.action.PHONE_STATE"/>
            <action android:name="android.intent.action.BATTERY_LOW"/>
        </intent-filter>
    </receiver>

 

2. CallReceiver.java를 만든다.

 

import android.annotation.SuppressLint;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.telecom.TelecomManager;
import android.telephony.TelephonyManager;
import android.util.Log;

import androidx.annotation.RequiresApi;


//전화 중이면 전화를 받고 아니면 메세지
public class CallReceiver extends BroadcastReceiver {//현재 전화가 오는지 받는지 끊는지 기본인지
   
   String phonestate;
   
   @RequiresApi(api = Build.VERSION_CODES.O)
    @SuppressLint("MissingPermission")
    @Override
    public void onReceive(Context context, Intent intent) {

        

        if (intent.getAction().equals("android.intent.action.PHONE_STATE")) {

        TelecomManager telephonyManager = (TelecomManager) context.getSystemService(Context.TELECOM_SERVICE);

        Bundle extras = intent.getExtras();
        if (extras != null) {

            String state = extras.getString(TelephonyManager.EXTRA_STATE); // 현재 폰 상태 가져옴
            if (state.equals(phonestate)) {
                return;
            } else {
                phonestate = state;
            }
            if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
                Log.d("qqq", "통화벨 울리는중");

            } else if (state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)) {
                Log.d("qqq", "통화중");

            } else if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)) {
                Log.d("qqq", "통화종료 혹은 통화벨 종료");
            }

        }

    }

        else if (intent.getAction().equals("android.intent.action.BATTERY_LOW"))//배터리가 로우일때
        {
            Log.d("qqq", "배터리 로우에 대한 동작을 여기에 작성한다.");


        }


    }
}

 

이런식으로 receiver를 등록해주면, 배터리 값에 변화가 왔을때 

 

        else if (intent.getAction().equals("android.intent.action.BATTERY_LOW"))//배터리가 로우일때

 

부분이 동작할 것이다.

 

배터리 상태값의 변화는 

 

https://developer.android.com/training/monitoring-device-state/battery-monitoring?hl=ko#java

 

배터리 수준 및 충전 상태 모니터링  |  Android 개발자  |  Android Developers

백그라운드 업데이트가 배터리 수명에 미치는 영향을 줄이기 위해 업데이트 빈도를 변경할 때는 현재 배터리 수준과 충전 상태부터 확인하는 것이 좋습니다. 기기의 배터리 수준과 충전 상태에 따라 애플리케이션 업데이트 수행이 배터리 수명에 영향을 미치는 정도가 달라집니다. 기기가 AC 전원을 통해 충전될 때 업데이트 수행이 미치는 영향은 무시할 만한 수준이므로 기기가 콘센트에 연결되어 있을 때는 언제나 대개 새로고침 비율을 최대화할 수 있습니다. 반대로 기기가

developer.android.com

여기서 더 많이 확인할 수 있다. 자신이 원하는 배터리 상태를 찾아서 리시버에 등록 후, 그에맞는 동작을 하면된다.

 

 

 

 

내가 작성한 코드를 응용하면 위 홈페이지에서 자신이 원하는 동작을 브로드케스트로 등록하여 아래처럼 사용할 수 있는 것이다.

 

 

 

------------------------------------------------------------------------

 

in manifests.xml

 

 

    <receiver android:name=".BatteryLevelReceiver">
     
<intent-filter>
       
<action android:name="android.intent.action.BATTERY_LOW"/>
       
<action android:name="android.intent.action.BATTERY_OKAY"/>
     
</intent-filter>
   
</receiver>

 

--------------------------------------------------------------------------

 

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import androidx.annotation.RequiresApi;


public class BatteryLevelReceiver extends BroadcastReceiver {//현재 전화가 오는지 받는지 끊는지 기본인지
   
    public void onReceive(Context context, Intent intent) {

        if (intent.getAction().equals("ndroid.intent.action.BATTERY_OKAY")) {

 

         Log.d("qqq", " 배터리가 로우 상태를 벗어나 정상으로 돌아왔을 때에 대한 동작을 여기에 작성 ");

    }

        else if (intent.getAction().equals("android.intent.action.BATTERY_LOW"))//배터리가 로우일때
        {
            Log.d("qqq", "배터리 로우에 대한 동작을 여기에 작성한다.");


        }


    }
}

 

 

----------------------------------------------------------------------------------------------

 

이런식으로 자신이 원하는대로 응용하여 사용 할 수 있다.

 

 

댓글
최근에 올라온 글
최근에 달린 댓글
250x250