티스토리 뷰
안드로이드에서는 배터리 상태에 대한 값을 계속해서 불러오는것을 권장하지 않는다.
이러한 행동 자체가 배터리 소모가 크기 때문이다.
그래서 배터리가 낮아졌을때 (보통 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
여기서 더 많이 확인할 수 있다. 자신이 원하는 배터리 상태를 찾아서 리시버에 등록 후, 그에맞는 동작을 하면된다.
내가 작성한 코드를 응용하면 위 홈페이지에서 자신이 원하는 동작을 브로드케스트로 등록하여 아래처럼 사용할 수 있는 것이다.
------------------------------------------------------------------------
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", "배터리 로우에 대한 동작을 여기에 작성한다.");
}
}
}
----------------------------------------------------------------------------------------------
이런식으로 자신이 원하는대로 응용하여 사용 할 수 있다.
'Web&App > 안드로이드' 카테고리의 다른 글
onTouchListener , return true 와 false 차이 (터치 사라지게 하기) (0) | 2020.03.25 |
---|---|
안드로이드 터치 막기 (0) | 2020.03.19 |
안드로이드 전화 받기, 전화 끊기, 통화 상태보기 (answerCall, endCall) (0) | 2020.03.18 |
안드로이드 볼륨 조절하기 (원하는 볼륨값으로 세팅하기) (1) | 2020.03.17 |
exo player 기본 이미지 넣기 - Glide 사용 (artwork 삽입) (0) | 2020.03.17 |