본문 바로가기
안드로이드 웹앱 콘테츠 개발자 양성(국비지원)/Activity

Android Studio(기능) Broadcast Receiver

by 차누감 2019. 10. 7.

◎4대 주요 구성요소

1) Activity - 화면 담당

2) Service - 백그라운드 동작

3) Broadcast Receiver - 휴대폰 정보

4) Content Provider

 

명시적으로 

새로운 창을 만들자.

묵시적으로 코드 바꾸기. 실행 동작은 같다.

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
64
65
66
67
68
69
70
71
72
73
74
75
 
 
import android.content.IntentFilter;
 
public class MainActivity extends AppCompatActivity {
 
    MyReceiver myReceiver;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        // Broadcast Receiver : 디바이스의 상태 변화를 인지하고자 할 때 사용[ex. 배터리 부족, 와이파이 불가능, 불루투스 탐색 등등]
        //즉, 앱에서 운영체제의 정보를 취득하고 싶을 때..
        //방송(Broadcast)을 통해 모든 앱에게
        //알려주고 있음. 그러므로 이를 이용하고 싶다면
        //방송 수신기(Broadcast Receiver)를 만들면 됨.
    }
 
    public void clickBtn(View view) {
 
        //방송 보내기!! [내 앱안에 있는 리시버 실행하기.]
//        Intent intent= new Intent(this, MyReceiver.class);
//        sendBroadcast(intent);
 
        //묵시적 인텐트로 리시버 실행하기 [내 디바이스에 설치된 모든 앱에게 방송을 보내기]
        Intent intent= new Intent();
        intent.setAction("aaa"); //"aaa"라는 액션 방송을 듣는 모든 리시버 반응해라.
 
        sendBroadcast(intent);
 
        //Oreo 버전부처 브로드캐스트 리시버나 서비스 컴포넌트 사용에 제한을 두고 있음.(백그라운드에서 너무 리소스)
        //-묵시적 인텐트를 통한 리시버 호출은 금지함
        //본인 앱에서 sendBroadcast()로 발동하는 방송은 본인 앱의 리시버만 가능하기에.. 명시적 인텐트만 권장함
        //그럼에도 묵시적 인텐트로 하고 싶다면...
        //앱이 켜져 있을 때만 동작하도혹..
        //리시버를 이 액티비티에서 등록시켜 사용함
        //자바에서 리시버를 등록하여 사용할 수 있음.
 
        //시스템 브로드캐스트 인텐트는 여전히 묵시적 인텐트로 사용 가능함.
 
    }
 
    //액티비티가 화면에 보여질때
    //자동으로 실행되는 메소드
    @Override
    protected void onResume() {
        super.onResume();
 
        //동적으로 리시버 등록..(Manifest에 등록하지 않음.)
        myReceiver=new MyReceiver();
        IntentFilter filter=new IntentFilter();
        filter.addAction("aaa");
 
        registerReceiver(myReceiver, filter);
    }
 
    //액티비티가 화면에 보여지지 않을 때
    //지동으로 실행되는 메소드
    @Override
    protected void onPause() {
        super.onPause();
 
        //리시버를 제거
        unregisterReceiver(myReceiver);
    }
}
 
 
 

activity_main.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp"
    tools:context=".MainActivity">
 
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="send Broadcast"
        android:textAllCaps="false"
        android:onClick="clickBtn"/>
 
 
</RelativeLayout>
 
 

댓글