본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[Android/안드로이드] Bluetooth 를 사용한 Chatting 프로그램

by 돼지왕 왕돼지 2012. 3. 15.
반응형

안녕하세요 돼지왕 왕돼지입니다.

오늘은 Bluetooth(  블루투스 ) 에 대해 공부해 보았습니다.

공부를 한 코드는 Android Sample 에서 제공해주는 BlueToothChat 이란 프로젝트로 BlueTooth 에 대한 감을 잡기에 매우 좋은 자료입니다. 소스코드를 다 분석하진 않고, 필요한 내용만을 추려보았습니다.


핵심 인물(?) 

Bluetooth의 핵심인물은 BluetoothAdapter 란 녀석입니다. 모든 Bluetooth 관련 Action들은 이 녀석을 통해서 이루어집니다. 어떤 녀석들이 있는지 살짝 볼까요?

// bluetooth adapter 의 factory method
public static BluetoothAdapter getDefaultAdapter();
 
// bluetooth 기능이 on 되어있는지 확인
public boolean isEnabled();

// 블루투스의 scan 가능 여부를 query
public  int getScanMode();
// BluetoothAdapter.SCAN_MODE_CONNECTABLE

// BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE
// BluetoothAdapter.SCAN_MODE_NONE

// 현재 discovery 작업중인지를 query
public boolean isDiscoverying();

// discovery 시작
public void startDiscovery();

// discovery 취소
public void cancelDiscovery();

 // address 에 매칭되는 블루투스 장비를 가져옴.
public BluetoothDevice getRemoteDevice( String address );

// listen 을 수행하는 socket 을 얻어온다. 이 socket 은 secure 하다.
public BluetoothServiceSocket listenUsingRfcommWithServiceRecord( String name, UUID uuid );

// listen 을 수행하는 socket 을 얻어온다. 이 socket 은 insecure 하다.
public BluetoothServiceSocket listenUsingInsecureRfcommWithServiceRecord( String name, UUID uuid ); 

// Pairing 되어있는 장비들의 list 를 가져온다. 
public Set<BluetoothDevice> getBoundedDevice();  







BluetoothDevice

// Device Name query.

public String getName();


// Device Address query.
public String getAddress();

// 해당장비에 uuid 로 secure connection.
public BluetoothSocket createRfcommSocketToServiceRecord( UUID uuid );

// 해당장비에 uuid 로 insecure connection.
public BluetoothSocket createInsecureRfcommSocketToServiceRecord( UUID uuid ); 

// Pairing 상태를 query
public int getBondState(); 
// BOND_BONDED
// BOND_BONDING
// BOND_NONE 





BluetoothServerSocket

// connection 이 생길 때까지 block 되는 accept.
// 이 녀석은 block 되기 때문에 반드시 thread 로 돌려야 한다. ( Sample 에서는 AcceptThread 에서 처리 )
public BluetoothSocket accept();

// socket close
public void close(); 




 BluetoothSocket

// 해당 device 에 연결하는 method.
// 이 녀석은 blocking method 로 정상 연결 또는 exception 이 날 때까지 block 된다.
// 따라서 반드시 thread 로 처리되어야 한다. ( sample 에서는 ConnectThread 에서 처리 ) 

public void connect();

// socket close
public void close(); 

// 해당 소켓의 input stream 을 구해옴.
public InputStream getInputStream();

// 해당 소켓의 output stream 을 구해옴.
public OutputStream getOutputStream(); 


Bluetooth 의 input 은 InputStream.read() 를 통해 이루어지며, 이 녀석은 input stream의 값이 들어올 때까지 block 이 되는 녀석이라 다른 thread 에서 작업 되어야 합니다. ( Sample 에서는 ConnectedThread 에서 처리 )







Bluetooth 관련 Intents

// bluetooth 를 enable 시키는 activity 띄우는 intent.
BluetoothAdapter.ACTION_REQUEST_ENABLE
 
// bluetooth 를 discoverable 상태로 만드는 activity intent.
BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE 

// bluetooth discoverable 유지시간으로 sec 단위. ( int )
BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION

// bluetooth 장비가 발견되었다는 broadcast intent.
BluetoothDevice.ACTION_FOUND 

// bluetooth discovery 가 끝났음을 알려주는 broadcast intent.
BluetoothAdapter.ACTION_DISCOVERY_FINISHED 

// bluetooth 장비 가져오기 ( Parcelable )
BluetoothDevice.EXTRA_DEVICE 




도움이 되셨다면 손가락 꾸욱~





반응형

댓글