브로드캐스트 수신자
브로드캐스팅이란 메시지를 여러 대상에게 전달하는 것을 말합니다.
예를 들어, 채팅 앱에서 일대일 채팅을 할 때 메시지는 두 사람끼리 주고받지만 여러 사람에게 한꺼번에 전달하고 싶을 때는 그룹 채팅방을 만들어 한 번 쓴 글을 여러 사람에게 전달하는 것을 상상하면 쉽습니다.
안드로이드는 여러 애플리케이션 구성 요소에게 메시지를 전달하고 싶은 경우 브로드캐스팅을 사용합니다.
가장 전형적인 예가 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 메시지 받기
브로드캐스트 수신자를 만들면 그 안에서 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 이전 버전에서 검증된 앱으로 인식하기 때문에 시스템이 자동으로 위험 권한을 부여하게 됩니다.
최근댓글