메뉴 건너뛰기

모바일앱


GATT 신호를 잘 감지하고 블루투스 디바이스도 잘 찾아내었지만,  디바이스에 연결하고자 했더니 곧바로 연결이 되지 않는 현상이 생기더군요.

(이때의 디바이스는 라즈베리파이 입니다)


당시 코드는 아래와 같았습니다,

즉,  Advertising 중인 디바이스를 UUID를 이용해 찾아낸 후 해당 디바이스(_device)에 연결을 시도하는 코드입니다.


:
private BluetoothGatt bleGatt_;

:

GattClientCallback gattClientCb = new GattClientCallback();

bleGatt_= _device.connectGatt( this, false, gattClientCb); //연결시도
         


그랬더니 자꾸만  아래의 콜백에서 _newstate 에 STATE_DISCONNECTED 값이 담겨오는 문제가 있었습니다.

_status는 뜬금없는 '133'이라는 값을 담고 있었습니다. 


@Override
        public void onConnectionStateChange( BluetoothGatt _gatt, int _status, int _newstate ) {
            super.onConnectionStateChange( _gatt, _status, _newstate );
            if( _new_state == BluetoothProfile.STATE_CONNECTED ) {
                :
            } else if ( _newstate == BluetoothProfile.STATE_DISCONNECTED ) {
                :
            }
        }


이에, 구글신을 열심히 뒤졌더니 여러가지 제안들이 있었고 그들중에 저의 문제를 해결한 방법들을 아래와 같이 정리해 보았습니다.


1. 디바이스를 찾았으면 GATT 스캐닝을 종료하고 약 100ms 이후에 찾아낸 디바이스와 연결을 시도하라.

2.  connectGatt 함수의 사용을 아래와 같이 하라.

bleGatt_= _device.connectGatt( this, false, gattClientCb, BluetoothDevice.TRANSPORT_LE);


네, 저는 두번째 방법으로 시원하게 해결이 되더군요. 하지만, 이 함수는 SDK 버전이 23이상에서 지원이 됩니다. 이에, 아래와 같이 SDK 버전을 확인 한 후 호출을 해야 합니다.


:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            bleGatt_= _device.connectGatt( this, false, gattClientCb, BluetoothDevice.TRANSPORT_LE);
        }
        else {
            bleGatt_= _device.connectGatt( this, false, gattClientCb);
        }

SDK가 23미만 버전에서는 인자 수가 3개인 함수를 사용할 수 밖에 없습니다. 이때는 1번과 같은 방법으로 디바이스가 잘 연결되길 바라는 수 밖에 없는 것 같습니다. >.<


건투를 빕니다!


 




번호 제목 글쓴이 날짜 조회 수
공지 [TIP] 안드로이드 앱 빌드시 "Error:Execution failed for task ':app:compileDebugJavaWithJavac'" 오류가 발생할 경우 파이팅건맨 2017.09.13 11730
공지 [TIP] 안드로이드 - 설치된 앱 목록 얻기 파이팅건맨 2016.03.22 7760
공지 [TIP] 죽지 않는 안드로이드 서비스 만들기 (Unstoppable service) [6] 파이팅건맨 2015.06.26 7224
16 [TIP] 안드로이드 앱이 처음 설치될때 Referrer 정보 받아 오기 (2020.3.1 이후) 파이팅건맨 2020.10.15 135
» [TIP] Android 코드에서 블루투스 연결이 잘 안될때 [3] 파이팅건맨 2019.05.11 3084
14 [TIP] "cordova run android" 명령을 실행했는데 "A problem occurred evaluating project ':CordovaLib'"오류가 뜰때 파이팅건맨 2019.01.22 1115
13 [TIP] Mac에서 Cordova run android 를 실행했는데 "Command failed with exit code EACCES" 오류가 뜰때 파이팅건맨 2019.01.22 480
12 [TIP] 안드로이드에서 심박수 측정하는 코드 [18] 파이팅건맨 2019.01.02 3621
11 [TIP] 안드로이드 스튜디오에서 Error:android-apt plugin is incompatible with the Android Gradle plugin. Please use 'annotationProcessor' configuration instead 오류날때 파이팅건맨 2018.02.02 2953
10 [TIP] 안드로이드 앱 빌드시 "Error:Execution failed for task ':app:compileDebugJavaWithJavac'" 오류가 발생할 경우 파이팅건맨 2017.09.13 11730
9 [TIP] 안드로이드 앱이 처음 설치될때 Referrer 정보 받아 오기 파이팅건맨 2016.08.30 6918
8 [TIP] 안드로이드에서 구글 스프레드시트에 데이터 쓰기 파이팅건맨 2016.05.04 3155
7 [TIP] 안드로이드에서 키보드가 나타날 때 레이아웃이 위로 움직인다면 파이팅건맨 2016.03.22 1063
6 [TIP] 안드로이드 - 설치된 앱 목록 얻기 파이팅건맨 2016.03.22 7760
5 [TIP] 안드로이드의 최상단에 띄워놓은 Floating Window가 키보드를 인지하는 방법 파이팅건맨 2016.01.07 2314
4 [TIP] 안드로이드의 Floating Window가 Back키를 인지 하는 방법 [2] 파이팅건맨 2016.01.07 2305
3 [TIP] 죽지 않는 안드로이드 서비스 만들기 (Unstoppable service) [6] 파이팅건맨 2015.06.26 7224
2 [TIP] 내 안드로이드 앱에 위젯을 띄우는 방법 파이팅건맨 2015.06.03 620
1 [TIP] 안드로이드 앱 삭제 방지 기능 구현 파이팅건맨 2015.06.03 4552
위로