728x90
방송 수신자
- 애플리케이션에 필요한 이벤트를 필터링하는 컴포넌트
- 원하는 방송이 나왔을 경우에 그 정보를 가져와 처리하는 작업
public class MyBroadcastReceiver extends BroadcastReceiver { // 방송 수신자 기능을 제공하는 부모 클래스
public void onReceive(Contextcontext, Intentintent) {
... // 방송이 수신되면 이 메소드 호출 → 필요한 코드를 넣음
}
}
방송 수신자 등록 방법
- 매니페스트 파일에서 선언 : 8.0이상 버전 동작 안함
- 자바 코드에서 동적 등록 : 8.0 이상 버전에서 '방송 수신자' 등록 요구
- 암시적 방송 수신자의 경우 매니페스트 파일 선언 시 동작 안함
→registerReceiver 메서드 사용해 java 코드에서 등록
// 방송 수신자의 인텐트 필터
<receiver android:name="MyBroadcastReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED">
</action>
</intent-filter>
</receiver>
실습
- 방송 수신자 클래스 정의
- onReceive 메소드를 재정의, 필요한 방송 정보 선택
- 자바 프로그램에서 방송 수신자 등록
- 인텐트 필터에 필터링 할 액션 지정 → registerReceiver 메소드 호출
public class MainActivity extends AppCompatActivity {
TextView myText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myText = (TextView) findViewById(R.id.textView);
}
public void onResume() {
super.onResume();
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_BATTERY_LOW);
filter.addAction(Intent.ACTION_BATTERY_CHANGED);
registerReceiver(receiver, filter);
}
@Override
public void onPause() {
// onPause 경우 현재 방송 수신을 unregisterReceiver를 사용해 해제
super.onPause();
unregisterReceiver(receiver);
}
BroadcastReceiver receiver = new BroadcastReceiver() {
// onReceive는 방송이 수신되었을 때 어떻게 행동할 것인가를 정의하는 부분
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Toast.makeText(context, action, Toast.LENGTH_LONG).show();
myText.setText(action);
// 두 가지 Action을 비교하여 같을 때 처리하는 작업 진행
if(action.equals(Intent.ACTION_BATTERY_CHANGED)) {
int maxvalue = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 0);
int value = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
int level = value * 100 / maxvalue;
// level은 'max value'가 최대로 충전된 양이고, 'value'는 현재의 양임임
myText.setText(action + "\n 현재 배터리 레벨 : " + level);
}
else if (action.equals(Intent.ACTION_BATTERY_LOW)) {
// 배터리 부족 메시지 띄움
myText.setText(action + "\n 배터리가 부족한 상황입니다.");
}
}
};
}
728x90
'Android Programming' 카테고리의 다른 글
[Mobile Programming] 스레드 (0) | 2021.12.10 |
---|---|
[Android Programming] 카메라 영상 캡처 (1) | 2021.12.05 |
[Mobile Programming] 서비스 (0) | 2021.11.20 |
[Mobile Programming] 멀티미디어 데이터 (0) | 2021.11.19 |
[Mobile Programming] 리소스 (0) | 2021.11.19 |