Blinking My Melody

기말 정리 2) Broadcast Receiver

2019. 6. 13. 14:09

Broadcast Receiver

 

: 시스템 또는 다른 Activity의 메시지를 수신할 때 사용 가능

- 안드로이드 운영체제 혹은 다른 액티비티가 뿌리는 메시지를 받을 수 있는 기능

- 안드로이드는 정보를 뿌림 -> 아무도 안 받는다고 해서 문제가 되지 않기 때문에 BroadCast 사용

- 폰에 설치되어 있는 모든 앱에 메시지를 뿌리진 않음

- AndroidManifest에도 등록 가능 (서비스 등이 돌아가서 화면이 실행되지 않더라도 그 메시지를 받아야 할 때)

 

실습 1) Bluetooth On/Off 감지하기 - 문자보내기 이어서 만들면 OK

AndroidManifest.xml

 

<uses-permission android:name="android.permission.BLUETOOTH" /> 추가

 

 

MainActivity.java

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package com.example.soyoung.finalpr;
 
import android.Manifest;
import android.bluetooth.BluetoothAdapter;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.IntentFilter;
import android.support.annotation.NonNull;
import android.support.v4.content.ContextCompat;
import android.telephony.SmsManager;
 
public class MainActivity extends AppCompatActivity {
    private BroadcastReceiver receiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            Log.d("Receiver""onRecieve");
            int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1);
            // get*Extra() 메서드로 인텐트에 포함된 추가 정보 얻을 수 있음
            // 예) getStringExtra() -> 문자열 | getIntExtra -> 정수 반환
            // EXTRA_STATE : 현재 상태 | EXTRA_PREVIOUS_STATE : 이전 상태
            switch (state) {
                case BluetoothAdapter.STATE_ON:
                    Log.d("Receiver""Bluetooth ON");
                    break;
                case BluetoothAdapter.STATE_OFF:
                    Log.d("Receiver""Bluetooth OFF");
                    break;
            }
        }
    };
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
 
    @Override
    protected void onStart() {
        super.onStart();
        IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
        // ACTION_STATE_CHANGED : 블루투스 상태변화 액션
        // IntentFilter가 필요할 때 : 암시적 인텐트를 통해 사용자로 하여금 어느 앱을 사용할지 선택하도록 하고자 할 때
        registerReceiver(receiver, filter);
    }
 
    @Override
    protected void onStop() {
        super.onStop();
        unregisterReceiver(receiver);
    }