반응형

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

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

안드로이드 단말 안에서 여러 앱에 어떤 메시지를 전달하고 싶은데 어떤 앱이 이 메시지를 받기를 원하는지를 모른다면 브로드캐스팅 방법으로 전달할 수 있습니다.

그러면 앱에서 브로드캐스트 수신자라는 것을 만들어 원하는 브로드캐스팅 메시지만 받을 수 있습니다.

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



브로드캐스트 수신자

브로드캐스팅이란 메시지를 여러 대상에게 전달하는 것을 말합니다.

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

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

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

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

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

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

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

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

<receiver android:name=".SmsReceiver">
  <intent-filter>
    <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
  </intent-filter>
</receiver>

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

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

SMS 수신 과정

SMS 메시지 받기

브로드캐스트 수신자를 만들면 그 안에서 onReceive 메소드를 재정의할 수 있으며 메시지를 수신하면 이 메소드가 자동으로 호출됩니다.

따라서 브로드캐스트 수신자의 기본 구조는 다음과 같이 만들어집니다.

public class SmsReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i(TAG, "onReceive() 메소드 호출됨.");
      }
}

onReceive 메소드의 파라미터로 전달받은 인텐트 객체 안에는 SMS를 보낸 사람이나 내용이 들어 있습니다.

따라서 그 부가데이터를 확인하면 SMS 정보를 화면에 보여줄 수 있습니다.

다만 화면이 없는 브로드캐스트 수신자로 받았기 때문에 액티비티 쪽으로 전달한 후에 화면에 보여주어야 합니다.

또한 SMS를 수신할 때는 권한이 있어야 하며 AndroidManifest.xml 파일 안에  RECEIVE_SMS 권한을 추가하면 수신할 수 있습니다.

<uses-permission android:name="android.permission.RECEIVE_SMS" />

SMS 수신 권한은 위험 권한이라서 앱 실행 시에 사용자에게 권한 승인을 받아야 합니다.

만약 실행 시에 권한 승인을 받는 코드를 넣기 힘들다면 build.gradle 파일에서 targetSdkVersion을 22이하로 낮추어줍니다.

이렇게 하면 22 이전 버전에서 검증된 앱으로 인식하기 때문에 시스템이 자동으로 위험 권한을 부여하게 됩니다.

 


반응형

'안드로이드 개발 > 부스트코스(안드로이드 프로그래밍)' 카테고리의 다른 글

프래그먼트  (0) 2019.03.12
위험권한 부여하기  (0) 2019.03.12
서비스  (0) 2019.03.10
엑티비티 수명주기  (0) 2019.03.09
부가데이터  (0) 2019.03.08
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기