0. "브로드캐스트 수신자" 하기 전에 간단 설명

브로드캐스팅 -> 메시지를 여러 대상에게 전달하는 것

 

예를 들어, 채팅 앱에서 일대일 채팅을 할 때 메시지는 두 사람끼리 주고받지만 여러 사람에게 한꺼번에 전달하고 싶을 때는 그룹 채팅방을 만들어 한 번 쓴 글을 여러 사람에게 전달하는 것을 상상하면 쉽습니다.

안드로이드는 여러 애플리케이션 구성 요소에게 메시지를 전달하고 싶은 경우 브로드캐스팅을 사용합니다.

가장 전형적인 예가 SMS 메시지를 받을 때입니다.

앱에서 브로드캐스팅 메시지를 받고 싶다면 브로드캐스트 수신자를 만들어 등록하면 됩니다.

 

 

 

 

브로드캐스팅(Broadcasting)이란 방송의 의미로 여러 사람에게 동시에 데이터를 전달한다는 뜻입니다.

여러분이 잘 아는 MBC, KBS 그리고 SBS 방송사의 약자 B도 브로드캐스팅을 의미합니다.

안드로이드 단말 안에서 여러 앱에 어떤 메시지를 전달하고 싶은데

어떤 앱이 이 메시지를 받기를 원하는지를 모른다면 브로드캐스팅 방법으로 전달할 수 있습니다.

그러면 앱에서 브로드캐스트 수신자라는 것을 만들어

원하는 브로드캐스팅 메시지만 받을 수 있습니다.

브로드캐스트 수신자에 대해 알아봅시다.

 

서비스처럼 브로드캐스트도 화면(=UI)이 없다.

 

브로드캐스트 수신자(=브로드캐스트 리시버) 같은 말이다.

 

 

 

 

 

 

1. 설명

브로드캐스트 수신자 = "브로드캐스팅되는 메시지를 받는게 브로드캐스트 수신자"라고 한다.

=브로드캐스트 리시버(영어로는 이렇게 부름)

 

가장 대표적인게 sms문자라고 할 수 있다.

 

sms문자를 단말에서 받아서 처리하는게 "텔레포니 모듈"이라고 하는건데요. (넘겨)

"텔레포니 무듈"에서 문자를 받으면

이 문자를 가지고 처리하고자 하는 앱들이 여러개가 있을 수가 있잖아요.

그래서,

필요한 앱들은 "이 문자를 받아서 처리하세요."   라고 하고

인텐트에다가 이 메시지를 넣어서 브로드캐스팅이라는 것을 하면 된다.

 

 

***(설명-시작)*************************************************************

브로드캐스팅이라는 것은

일반적으로 어떤 언어를 배우고 할 때,

네트워킹 관련된거, 그니깐

클라이언트와 서버가 있을 때 데이터를 주고 받는 것을 할 때보면,

(예를들어) 채팅데이터를 1:1로 주고 받는 것이 있고,

여러 사람들에게 데이터를 한꺼번에 뿌려주는 것이 있다.

 

여러 사람들에게 데이터를 한꺼번에 뿌려주는 것을 "브로드캐스팅"이라고 한다.

즉,

여러 사람들에게 한꺼번에 데이터를 뿌려주는 것을 "브로드캐스팅"이라고 한다.

 

이 "브로드캐스팅"방식으로 인텐트가 뿌려지는데

내가 만약에 그 뿌려지는 인텐트라고하는 객체를 받겠다.(시스템에서 왔다갔다 할것이다,,,아마)

그러면 

"브로드캐스트리시버"라는 것을 등록해 놓으면 

받을 수가 있다.

 

그래서, "브로드캐스트리시버=브로드캐스트수신자"라는 것도

UI가 없다(화면이 없다고)

 

 

시스템이 관리를 하기 때문에 그 시스템이 관리를 하면서

내가 등록해서 

"이런걸 주세요"하면서 이게 날라오면

"제가 받겠어요~"라는게 있으면

그 인텐트를 받아서 전달을 해주게 된다.

******(설명-끝)************************************************************

 

 

 

 

 

 

2. 만드는 방법

예제 - 받아서 처리 하는 거

(SMS로 전달된 데이터가 있으면 SMS 데이터를 받아서 처리하는 것을 만들거다)

 

1)

만들어짐

 

 

그리고 매니페스트 가서 보면 receiver가 자동으로 추가되어 있음

 

 

 

 

2)

- SmsReceiver.java -  =  "브로드캐스트 수신자"

단말에서 SMS문자를 받았을 때, 내가 이걸(SMS문자) 등록한 쪽으로 전달을 하게 되면. 

내가 이걸 받을 수가 있겠죠?!?!!!!!!!!!

그러면 내가 받으면 onReceive()에서 떨어지게된다(받게 된다)!

onReceive()는 콜백메소드이다.

SMS문자를 내가 받겠다라고 등록을 했을 경우에

onReceive()가 자동으로 호출이 된다.! (단,SMS가 오다면!!)

자동 호출된다는 것을 이제 알고 있으니깐!,

여기다가 이제 처리하는 코드를 넣어주면 된다!!

 

 

 

그리고 브로드캐스트 수신자(=브로드캐스트 리시버)라고 하는 것은

매니페스트에 등록해 놓으면

 

시스템알아서 매니페스트에 등록해놓은 클래스를 확인하고

클래스의 onReceive()메소드 내용을 봐서,

onReceive() 안에 있는 것들(처리코드들)을

받고 싶다는 것을 알게 되고, 등록을 하게 된다.

 

그리고

startActivty(), startService() 처럼 브로드캐스트는 안써도된다.(시작메소드같은거 안써도됨)

 

 

 

 

 

 

 

3. 사용방법

2번까지 했으면 브로드캐스트 리시버(=브로드캐스트 수신자) 만들어 놓은 것까지만 했음.

 

지금 상태(브로드캐스트 상속한거만 있고 매니페스트에 등록된 상태)에서 

받는다면,

엄청나게 많은 브로드캐스팅 인텐트 메시지가 날라다닐 것이다.

그렇게 하면

그 것들을 전부다 받는다라는 문제가 생길 것이다.

 

그래서

어떤것들을 받겠다라는 것을 등록을 할 수가 있다.

어떤것들을 받을 것인지를,

등록을 해줘야한다. (밑에그림)

 

새로운 브로드캐스트 수신자를 만들면 이 정보도 매니페스트 파일에 추가됩니다.

<receiver> 태그를 이용해 추가되는데, 이 태그 안에는 <intent-filter> 태그를 이용해 어떤 브로드캐스팅 메시지를 받고 싶은지 지정할 수 있습니다.

브로드캐스팅 메시지는 인텐트 객체로 만들어져 전달됩니다.

SMS 메시지를 받고 싶어 만든 SmsReceiver 클래스는 다음과 같이 등록할 수 있습니다.

<intent-filter> 태그 안에 들어있는 <action> 태그는 SMS_RECEIVED 라는 name 속성값을 가지고 있습니다.

SMS를 담고 있는 인텐트는 이와 동일한 액션 정보를 갖고 있어 이 브로드캐스트 수신자는 SMS를 담고 있는 인텐트를 받을 수 있게 됩니다.

 

 

 

 

 

그러면 이제

BroadcastReceiver를 상속해서 만든 클래스인 리시버클래스에서

그 정보를 받을 수가 있게 됩니다.

 

그 다음에

SMS 받는 기능은

매니패스트에서 권한(퍼미션)을 주어야한다.!!! (밑에 그림)

 

이 권한을 추가를 해야지 SMS를 받을 수가 있다!

 

근데!! 주의!!

마시멜로버전 이후부터

몇가지의 특정한 권한들이 위험권한이 되어서 매니페스트 등록만으로는 안됩니다!!

실행 시에 권한을 사용자에게 한번 더 받아야 합니다...

 

그래서 이전 버전으로 버전을 바꿔 주었음....(낮은 단계로 바꿔주었음..  22버전으로)

- SmsReceiver.java 코드 수정(Log 넣어줌) -

 

코드 수정, 버전 낮춘 다음에

실행 해보고

앱을 끄고 자기 자신한테 문자를 보내면

Log창에서

"onReceive() 호출됨"을 확인 할 수 있다. (밑에 그림)

그래서 SmsReceiver.java의 onReceive()가 호출 되었다는 것을 확인했다.

 

 

 

 

 

 

 

 

 

 

4. 최종 정리

브로드캐스트 수신자(=브로드캐스트 리시버)가 어떻게 동작하는지를 알기만 하면 된다.

 

------------(설명 - 시작)----------------------------------------------------------

즉, 정리하자면, (밑에 그림)

브로드캐스트 수신자(BroadcastReceiver 상속한거)를 만들어 놓고

매니패스트에 등록하고

매니패스트에 등록을 하는데 SMS에 받겠다고 등록을 하겠다라는 거다. 

그 다음에 

권한을 등록을 하면(밑에 그림)

이 권한이 위험 권한이니깐

버전까지 내려 주었고 

 

이렇게 하면 SMS를 받을 수가 있다!!

라고 하는 것까지 알수가 있습니다!!

 

 

어쨌든,

 

SmsReceiver.java에다가 BroadcastReceiver를 상속하고

SmsReceiver.java 등록하면 -생략-

onReceive()가 호출된다라는 것까지 알게 되었다. 

-------------(설명 - 끝)-----------------------------------------------------------

 

 

 

 

 

 

 

 

 

5. 전체 코드 & 구조

 

연습한게 SMS이니깐