메뉴 건너뛰기

모바일앱


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] 죽지 않는 안드로이드 서비스 만들기 (Unstoppable service) [6] 파이팅건맨 2015.06.26 6568
공지 [TIP] 안드로이드 앱 빌드시 "Error:Execution failed for task ':app:compileDebugJavaWithJavac'" 오류가 발생할 경우 파이팅건맨 2017.09.13 6555
공지 [TIP] 안드로이드 앱이 처음 설치될때 Referrer 정보 받아 오기 파이팅건맨 2016.08.30 3497
43 [TIP] iOS - UIWebView에 로컬 html 파일 로드하기 (Swift 4) 파이팅건맨 2019.06.05 30
42 [TIP] Tizen Push가 갑자기 내려오지 않을때 파이팅건맨 2019.05.20 31
41 [TIP] 두근두근앱이 라즈베리파이를 두근거리도록 개발한 기록 #3 파이팅건맨 2019.05.15 90
40 [TIP] 두근두근앱이 라즈베리파이를 두근거리도록 개발한 기록 #2 파이팅건맨 2019.05.11 106
» [TIP] Android 코드에서 블루투스 연결이 잘 안될때 파이팅건맨 2019.05.11 146
38 [TIP] 두근두근앱이 라즈베리파이를 두근거리도록 개발한 기록 #1 파이팅건맨 2019.05.07 165
37 [TIP] 타이젠 스튜디오에서 웨어러블 디바이스로 디버깅을 위한 바이너리 전송이 안 될때 파이팅건맨 2019.03.26 144
36 [TIP] http://tizen.org/system/tizenid 으로 타이젠 고유 id를 확보할 때 유의할 점 파이팅건맨 2019.03.14 75
35 [TIP] "cordova run android" 명령을 실행했는데 "A problem occurred evaluating project ':CordovaLib'"오류가 뜰때 파이팅건맨 2019.01.22 227
34 [TIP] Mac에서 Cordova run android 를 실행했는데 "Command failed with exit code EACCES" 오류가 뜰때 파이팅건맨 2019.01.22 141
33 [TIP] 안드로이드에서 심박수 측정하는 코드 [6] 파이팅건맨 2019.01.02 458
32 [TIP] Google Cloud API 사용시 안드로이드의 Assets 폴더에 있는 Crendential 파일 사용하기 파이팅건맨 2018.05.29 213
31 [TIP] 안드로이드 스튜디오에서 Error:android-apt plugin is incompatible with the Android Gradle plugin. Please use 'annotationProcessor' configuration instead 오류날때 파이팅건맨 2018.02.02 1865
30 [TIP] 안드로이드 앱 빌드시 "Error:Execution failed for task ':app:compileDebugJavaWithJavac'" 오류가 발생할 경우 파이팅건맨 2017.09.13 6555
29 [TIP] Error:java.lang.OutOfMemoryError: GC overhead limit exceeded 파이팅건맨 2016.11.03 867
28 [TIP] 안드로이드 앱이 처음 설치될때 Referrer 정보 받아 오기 파이팅건맨 2016.08.30 3497
27 [TIP] 안드로이드에서 구글 스프레드시트에 데이터 쓰기 파이팅건맨 2016.05.04 2450
26 [TIP] 안드로이드에서 키보드가 나타날 때 레이아웃이 위로 움직인다면 파이팅건맨 2016.03.22 827
25 [TIP] 안드로이드 - 설치된 앱 목록 얻기 파이팅건맨 2016.03.22 3029
24 [TIP] 안드로이드의 최상단에 띄워놓은 Floating Window가 키보드를 인지하는 방법 파이팅건맨 2016.01.07 1662
위로