안녕하세요. 호랑인 입니다.
오늘은 저번에 만든 앱에 블루투스를 연결해 볼 것입니다.
우선, 나중에 안드로이드 개발에 대해 정리할 때에도 말하겠지만, MSDN과 비슷하게 안드로이도 Android Developers 라는 사이트가 존재해서, 이 사이트를 통해 안드로이드 개발에 대한 거의 모든 것을 배울 수 있습니다. 물론 Kotlin과 같은 다른 부수적인 것을 통해 더 쉽고 간편하게, 예쁜 것을 할 수도 있지만, 우선 당장 어떤 동작하는 앱을 만들어야 하는 상황이라면, 정말 그 어떤 기초지식 없이도 시작하실 수 있습니다.
우선 당장 저만 봐도
1. 한번도 자바를 배운적이 없으며 (약간의 함정이 있다면 C#을 독학한 적이 있습니다.)
2. 안드로이드 개발은 Gingerbread 때 (갤럭시 S2가 최신폰이었던 시절...) 한두번 했던 것 이후로 이번이 처음입니다. 그 때 만든 앱이라 해봤자 버튼 누른 횟수만큼 숫자 커지는 앱? 뭔가 당연한 예제 한 두개 만들어 봤었습니다.
그렇기 때문에 이 글을 읽는 모두 안드로이드 앱을 만드는 것을 할 수 있다는 자신감을 가지고 임해주셨으면 좋겠습니다. 앱을 구현하는 코딩은 정말 누구나, 3일 배우면 얼추 할 수 있습니다. 제일 중요한 것은 어떤 앱을 만들지에 대한 구상입니다. 이 구상이 얼마나 참신한가, 얼마나 유익한가, 얼마나 세세한 디테일을 담아내는가가 앱의 품질을 결정합니다. 물론 저처럼 당장 어떤 정해진 일을 수행하기 위한 앱을 만드는 상황이 아니라면 말이죠.
그래서, Android Developers 에서 제공한 블루투스 연결 코드를 우선 그대로 가지고 와 봤습니다.
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | private class ConnectThread extends Thread { private final BluetoothSocket mmSocket; private final BluetoothDevice mmDevice; public ConnectThread(BluetoothDevice device) { // Use a temporary object that is later assigned to mmSocket, // because mmSocket is final BluetoothSocket tmp = null; mmDevice = device; // Get a BluetoothSocket to connect with the given BluetoothDevice try { // MY_UUID is the app's UUID string, also used by the server code tmp = device.createRfcommSocketToServiceRecord(MY_UUID); } catch (IOException e) { } mmSocket = tmp; } public void run() { // Cancel discovery because it will slow down the connection mBluetoothAdapter.cancelDiscovery(); try { // Connect the device through the socket. This will block // until it succeeds or throws an exception mmSocket.connect(); } catch (IOException connectException) { // Unable to connect; close the socket and get out try { mmSocket.close(); } catch (IOException closeException) { } return; } // Do work to manage the connection (in a separate thread) manageConnectedSocket(mmSocket); } /** Will cancel an in-progress connection, and close the socket */ public void cancel() { try { mmSocket.close(); } catch (IOException e) { } } } | cs |
만약 정말 급하다면, 그냥 이 코드 쓰세요. 어케 쓰는지 감이 1도 안오신다고요? 우선 마음을 차분히 갖고 코드를 봅시다.
우선, Thread 를 Extend 하는, 나만의(?)블루투스 연결 Thread 입니다. 일반적인 Thread와 마찬가지로, 결국 run() 함수를 통해 시행하게 됩니다.
나머지 설명은 사실 전부 주석에 적혀 있습니다. try와 catch문으로 가능한 문제 사항을 훌륭하게 처리해 놓은 코드입니다. 저희가 건들여야 하는 부분은 정말 간단한데요, 보면 마지막에 manageConnectedSocket이란 함수가 호출되었지만, 정의 되지 않았습니다. 저 함수를 정의해서, 원하는 행동을 하게 하면 되는 것입니다.
저는 그래서 ListView에 나타난 페어링된 기기 목록에서 눌린 기기와 연결을 하게 만들었습니다.
연결이 되었습니다. 아래에 뜨는 팝업 메세지는 Toast 라고 하는 것입니다. 이 또한 Android Developers에 잘 설명되어 있으니, 한번 보세요 ^^
위의 페널에서도 K11 이라는 장치와 연결되었다고 나타납니다. 이거 왜 굳이 앱을 통해서 하냐, 그냥 블루투스 설정 들어가서 연결하면 되는 거 아니냐 하실 수 있는데요, 저는 이것을 나중에 브레드보드와 연결할 것이기 때문에 제가 원하는 데로 Stream 을 보낼 수 있는 Socket을 필요로 하기 때문에 이렇게 하는 것입니다. 같은 이유로 사실 이 연결을 통해서는 음악을 실핼시킬 수 없습니다. 음악기기로 연결하는 모드가 따로 있고, 무엇보다 음악 앱으로 들어가는 순간 제 앱은 휴면 모드가 되기 때문에 (물론 막을 수는 있지만) 연결이 끊깁니다.
오늘은 블루투스를 연결했습니다. 다음에는 이제 혼천의와 관련된 일을 이 앱에 할 것입니다. 드디어 본격적인 앱 개발에 들어가겠습니다.
'프로젝트 > 프로젝트 [혼천의]' 카테고리의 다른 글
[혼천의-어플리케이션 개발] 별지도 그리기 (0) | 2018.08.11 |
---|---|
[혼천의-어플리케이션 개발] 1. 기본 뼈대 개발 (0) | 2018.05.18 |
[혼천의] 혼천의의 목표 (0) | 2018.05.13 |