2012년 11월 19일 월요일

Hello Android - Bluetooth 2

작성자: 박영기
작성일: 2012-11-20
이 문서는 Android 개발자 가이드: Bluetooth를 참조하여 작성하였습니다.


연결된 디바이스 목록 보기


새 Bluetooth 디바이스를 검색하기 전에
이미 연결되어있는지 확인하는 것이 좋다.

위 코드의 동작을 확인하려면
Android Setting 메뉴에서
새 블루투스 디바이스를 연결해야한다.

필자는 블루투스 키보드를 사용하였는데 결과값으로 "i-rocks Bluetooth Keyboard"와 "DC:2C:26:00:4A:29"가 출력되었다. 각각 디바이스 이름과 MAC Address이다.


새 Bluetooth 디바이스 발견하기



// Create a BroadcastReceiver for ACTION_FOUND
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        // When discovery finds a device
        if (BluetoothDevice.ACTION_FOUND.equals(action)) {
            // Get the BluetoothDevice object from the Intent
            BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
            // Add the name and address to an array adapter to show in a ListView
            mArrayAdapter.add(device.getName() + "\n" + device.getAddress());
        }
    }
};
// Register the BroadcastReceiver
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
registerReceiver(mReceiver, filter); // Don't forget to unregister during onDestroy

이 코드의 실행 결과는 흡사 UDP Multicast Group에 참여해서 자신의 존재를 알리기 위해 메시지를 일정시간동안 보내는 것과 유사하다.

BroadcastReceiver class의 객체의 추상메소드인 onReceive()를 구현한 후
android.content.Context class의 registerReceiver() 메소드에 인자로 전달하면
콜백을 받을 준비가 끝난다.

이후 BluetoothAdapter.startDiscover() 함수를 호출하면
약 12초 동안 onRecive() 콜백이 여러번 호출된다.

이건 흡사 Android 기기 > Setting 메뉴 > Bluetooth 에 나오는
Bluetooth 디바이스 목록 페이지와 유사하다.
단, Setting 메뉴에서는 시간 제한이 없다는 차이점이 있다.

주의: 새 Bluetooth 디바이스를 발견하는 일은 꽤 무거운 작업이고, 리소스를 많이 소비한다. 따라서 연결할 디바이스를 찾았다면 확실히 하기 위해서 cancelDiscovery() 를 호출해서 discovery 작업을 중지시켜야한다. 또한 이미 디바이스가 연결된 상태에서 discovery 작업을 할 경우 사용 가능한 대역폭이 아주 많이 감소하게 되므로 주의해야한다.

댓글 없음:

댓글 쓰기