일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
- 포너블
- 유클리드_알고리즘
- arrow function
- 확장 유클리드 알고리즘
- 국가인적자원개발컨소시엄
- 개인정보보호
- 동적타이핑
- Writeup
- 한국정보보호산업협회기자단
- 한국정보보호산업협회
- 호이스팅
- package-lock.json
- 한국산업인력공단
- package.json
- 백엔드
- 개인정보안전성
- 무료교육
- 디오판투스 알고리즘
- pwnable.tw
- 백엔드입문
- function scope
- 개인정보보호교육
- 곱셈 암호
- 모듈러 연산
- 마감임박
- 웹 프레임워크
- 덧셈 암호
- node.js
- 가명정보처리
- 개인정보보호위원회
- Today
- Total
짱짱해커가 되고 싶은 나
14-2. 브로드캐스트 리시버 본문
* 브로드캐스트 리시버(BR)
BR을 활용하면 안드로이드에서 발생하는 많은 이벤트를 감지하고 이를 처리하는 앱을 작성할 수 있다.
ex) 문자 메시지, 배터리 방전, 날짜 변경 등
안드로이드는 문자 메시지 도착, 배터리 방전, SD 카드 탈부착, 네트워크 환경 변화 등이 발생하면 broadcast 신호를 보낸다. 이런 신호를 받아서 처리하는 것이 브로드캐스트 리시버다.
프로젝트1: 배터리 상태 표시 앱
배터리의 상태가 변할 때마다 충전 상태 이미지와 배터리 상태 출력
+ 명령 프롬프트에서 AVD 의 배터리 상태 강제 변경 가능 (Q에서는 잘 작동 안해서 9.0 AVD 사용)
package com.example.project14;
import androidx.appcompat.app.AppCompatActivity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.BatteryManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
ImageView imageView;
EditText editText;
BroadcastReceiver br;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setTitle("배터리 상태 체크");
imageView = (ImageView)findViewById(R.id.imageView);
editText = (EditText) findViewById(R.id.textView);
br = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if(action.equals(Intent.ACTION_BATTERY_CHANGED)){
int remain = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
editText.setText("현재 충전량 : " + remain + "%\n");
if (remain >= 90) imageView.setImageResource(R.drawable.battery5);
else if(remain >= 70) imageView.setImageResource(R.drawable.battery4);
else if(remain >= 50) imageView.setImageResource(R.drawable.battery3);
else if(remain >= 10) imageView.setImageResource(R.drawable.battery2);
else imageView.setImageResource(R.drawable.battery1);
int plug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0);
switch(plug){
case 0:
editText.append("전원 연걸 : 안됨");
break;
case BatteryManager.BATTERY_PLUGGED_AC:
editText.append("전원 연결 : 어댑터 연결됨");
break;
case BatteryManager.BATTERY_PLUGGED_USB:
editText.append("전원 연결 : USB 연결됨");
break;
}
}
}
};
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(br);
}
@Override
protected void onResume() {
super.onResume();
IntentFilter iFilter = new IntentFilter();
iFilter.addAction(Intent.ACTION_BATTERY_CHANGED);
registerReceiver(br, iFilter);
}
}
BroadcastReceiver 객체를 만든다.
배터리가 변화면 onReceive() 메소드가 자동으로 호출된다.
그리고 onResume()메소드를 호출한 액션을 갖고 온다.
BatteryManger.EXTRA_LEVEL은 배터리 잔량을 표시한다.
BatterManger.EXTRA_PLUGGED는 외부 전원 연결 상태를 표시한다.
onResume() 은 인텐트 필터를 생성하고 ACTION_BATTERY_CHANGED에 액션을 추가한 뒤 BR에 등록한다.
onPause() 는 등록된 BR을 해제한다.
배터리를 바꾸기 위해서는 우선 telnet을 사용해야한다.
telnet localhost 5554 //AVD에 연결
auth 인증번호
인증번호는 emulator_console_auth_token 파일에 있고 nano ~/.emulator_console_auth_token 이렇게 치면된다.
이제 그 다음부터는 명령어를 치면 된다.
어댑터 연결을 빼면 배터리 부족 경고가 나온다.
'모바일' 카테고리의 다른 글
[안드로이드 취약점 진단] 1-1. 안드로이드 아키텍처 (0) | 2022.06.07 |
---|---|
14-3. 콘텐트 프로바이더 (0) | 2021.02.27 |
14-1. 서비스 (0) | 2021.02.27 |
13-3. 구글 지도 (0) | 2021.02.27 |
13-2. 스레드 (0) | 2021.02.27 |