일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- xe
- php 시큐어코딩
- 자동 생성
- roundcube
- FCM
- dovecot
- PHP
- Android
- 자바스크립트
- soundpool
- Mail Server
- html5
- not working
- 안드로이드 gcm
- curl
- C#
- 설치
- php 취약점
- 우분투
- android 효과음
- C# IO
- UML
- javascript
- WebView
- 안드로이드 푸시
- 안드로이드 푸쉬
- 폼메일
- 안드로이드
- mysql
- chart.js
- Today
- Total
그러냐
[android] 안드로이드 블루투스 연결 - bluetooth connect (내용 추가) 본문
★ 안드로이드 블루투스 헤드셋 연결 순서 ★
1. AndroidManifest.xml 파일에 퍼미션 지정
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-permission android:name="android.permission.BLUETOOTH" />
2. Get BluetoothAdapter
BluetoothAdapter 클래스의 static api 를 통한 default 객체 얻음
mBtAdapter = BluetoothAdapter.getDefaultAdapter();
3. Discovery
BluetoothAdapter를 통한 디바이스 검색
mBtAdapter.startDiscovery();
4. Device Broadadcast
디바이스 검색을 시작 했다면~
바로 바로 디바이스가 검색 되었다는 브로드캐스트가 마구마구 날라온다..
(내가 회사에서만 테스트 해서 그런가??ㅡㅡㅋ)
해당 액션을 잡아주기 위해 간단하게 onCreate()에 ACTION_FOUND에 대해 Receiver를 등록하자~
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Register for broadcasts when a device is discovered IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND); this.registerReceiver(mReceiver, filter); // Register for broadcasts when discovery has finished filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED); this.registerReceiver(mReceiver, filter); } |
리시버를 등록하였다면 BroadcastReceiver를 통한 디바이스 검색 성공에 대한 구현해 보자
- sample 코드 : bluetoothchat
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
if (device.getBondState() != BluetoothDevice.BOND_BONDED) {
mNewDevicesArrayAdapter.add(device.getName() + "\n" + device.getAddress());
}
} else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
setProgressBarIndeterminateVisibility(false);
setTitle(R.string.select_device);
if (mNewDevicesArrayAdapter.getCount() == 0) {
String noDevices = getText(R.string.none_found).toString();
mNewDevicesArrayAdapter.add(noDevices);
}
}
}
};
5. 디바이스 연결
디바이스 연결전에 디바이스 검색을 중지하자~
안드로이드 dev 사이트에 보면 검색 작업은 무지하게 리소스도 마니 먹고 단말을 느리게 하므로
검색이 성공하거나 끝난경우~ cancelDiscovery() 를 호출하라고 한다~
또한 startDiscovery()가 호출중이지 않아도 cancelDiscovery()를 호출할 수 있다. (당연히 아무일도 않일어 나지만^^)
따라서 블루투스 디바이스 연결전에 무조건 cancelDiscovery()를 호출해도 안전하다~~
mAdapter.cancelDiscovery();
검색된 디바이스의 MAC address를 통한 BluetoothDevice 생성
BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);
안드로이드 Bluetooth 구조에 따라 Rfcomm Socket 을 생성
UUID 는 Headset과 모듈통신 가능한 UUID 사용
현재는 headset 연결을 위한 headset service uuid 사용. 하지만 대부분 handfree로 안잡히고 spp 만 연결되는듯 합니다.
대략적인 이유는 A2DP 등 handfree쪽은 이미 안드로이드 core 단에서 dialer 를 위해 해당 프로토콜을 선점하고 있어서 겠지요ㅠㅠ
private static final UUID MY_UUID = UUID.fromString("00001108-0000-1000-8000-00805F9B34FB"); mmSocket = device.createRfcommSocketToServiceRecord(MY_UUID);
생성된 Socket을 통한 디바이스 연결
mmSocket.connect();
uuid 관련한 사항은 아래 포스팅 참조~~
'android' 카테고리의 다른 글
안드로이드 boot 실행 (0) | 2016.01.28 |
---|---|
모바일 웹에서 네이티브 앱 실행하기 (0) | 2016.01.28 |
URL Scheme를 사용해보자 (0) | 2016.01.28 |
Android 시스템 설정 페이지로 이동하는 Intent (0) | 2016.01.28 |
안드로이드 블루투스 프로그래밍 - BlueWatch Project #2 (0) | 2016.01.28 |