티스토리 뷰

브로드캐스팅이란 메시지를 여러 객체에게 전달하는 방법을 의미함.


일반적으로 채팅 앱을 구성할 때 볼 수 있는 개념으로 일대일 채팅을 할 때는 메시지를 두 사람 간에 주고받지만, 여러 사람에게 한꺼번에 전달하고 싶은 글이 있을 경우에는 브로드캐스팅 기능을 사용하는 것과 유사하다. 한마디로, 여러 객체에게 메시지를 전달하고 싶은 경우에 브로드캐스팅을 사용한다.


전달되는 브로드캐스팅 메시지는 브로드캐스트 수신자(Broadcast Receiver)라는 애플리케이션 구성요소를 이용해 받을 수 있다. 즉, 어떤 메시지를 받고 싶다고 등록하면 그 메시지가 이 애플리케이션에도 전달되는 방식이다.


브로드캐스트 수신자도 애플리케이션 구성요소이므로 새로운 브로드캐스트 수신자를 만들게 되면 매니페스트 파일에 등록해야 한다. 


서비스와 마찬가지로 브로드캐스트 수신자도 화면을 구성하지 않으며, 예외적으로 매니페스트 파일에 등록하는 방식이 아니라 자바 코드 상에서 registerReceiver()라는 메소드를 이용해 등록할 수 있다. 


UsbManager mUsbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
private static final String ACTION_USB_PERMISSION =
   
"com.android.example.USB_PERMISSION";
...
mPermissionIntent
= PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0);
IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
registerReceiver
(mUsbReceiver, filter);


브로드캐스트 수신자는 그 안에 onReceive() 메소드를 정의해야 하는데 이 메소드는 원하는 브로드캐스트 메시지가 도착하면 자동으로 호출된다. 


private static final String ACTION_USB_PERMISSION =
   
"com.android.example.USB_PERMISSION";
private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {

   
public void onReceive(Context context, Intent intent) {
       
String action = intent.getAction();
       
if (ACTION_USB_PERMISSION.equals(action)) {
           
synchronized (this) {
               
UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);

               
if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
                   
if(device != null){
                     
//call method to set up device communication
                   
}
               
}
               
else {
                   
Log.d(TAG, "permission denied for device " + device);
               
}
           
}
       
}
   
}
};

수신을 원하는 메시지는 인텐트 필터를 이용해 등록한다. 즉, 브로드캐스트 메시지도 인텐트에 정보를 넣어 전달하는 방식을 사용하므로 이 인텐트 필터를 이용해 시스템에 알려주어야 한다.

<activity ...>
...
   
<intent-filter>
       
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
   
</intent-filter>

   
<meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
       
android:resource="@xml/device_filter" />
</activity>

정의된 브로드캐스트 수신자는 인텐트의 액션 정보를 확인한 후 USB_PERMISSION이라는 액션 정보가 맞으면 메서드를 호출한다.






댓글
댓글쓰기 폼
공지사항
Total
92,889
Today
10
Yesterday
13
«   2019/04   »
  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        
글 보관함