안녕하세요. 호랑인 입니다.



오늘은 저번에 만든 앱에 블루투스를 연결해 볼 것입니다.



우선, 나중에 안드로이드 개발에 대해 정리할 때에도 말하겠지만, 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을 필요로 하기 때문에 이렇게 하는 것입니다. 같은 이유로 사실 이 연결을 통해서는 음악을 실핼시킬 수 없습니다. 음악기기로 연결하는 모드가 따로 있고, 무엇보다 음악 앱으로 들어가는 순간 제 앱은 휴면 모드가 되기 때문에 (물론 막을 수는 있지만) 연결이 끊깁니다.




오늘은 블루투스를 연결했습니다. 다음에는 이제 혼천의와 관련된 일을 이 앱에 할 것입니다. 드디어 본격적인 앱 개발에 들어가겠습니다.

안녕하세요. 호랑인 입니다.



오늘은 간만에 할 숙제가 없어서 프로젝트에 시간을 마음껏 할애할 수 있었습니다.




덕분에 어플리케이션을 만들기 시작했는데요, 이 어플리케이션은 혼천의의 움직임을 제어하는 핵심 부분이 될 것입니다. 크게 하는 일은 3 가지 정도입니다.


1. 아두이노와 휴대폰을 연결한다.

2. 현재의 시간 데이터를 통해 시간축이 얼마나 회전해야 하는지 계산하고, 이를 아두이노에게 송신한다.

3. 원하는 별을 데이터 베이스에서 검색해서 이것의 위치를 아두이노에게 송신한다.



그리하려 가장 기본적인 뼈대를 만들어보았습니다. 사실 안드로이드 어플리케이션을 만들어보는 것이 처음일 뿐더러, java 언어를 사용해보는 것도 처음이라 조금 힘들었지만, 본래 C#을 다뤄봤던 경험 때문인지 java 언어 자체에 의한 힘듦은 조금 덜 했던 것 같습니다.



안드로이드 개발을 위한 정보는 나중에 내용정리 쪽에 따로 포스팅을 할 것 같습니다. 여기는 언제까지나 프로젝트 게시판이기 때문이죠.



가장 먼저 해야 하는 것은 당연히 프로젝트를 만들고, 디자인을 하는 것입니다.






위는 제가 디자인한 앱의 시작 화면입니다. 여백이 많은 이유는 아직 디자인이 다 끝나지 않은 탓입니다.



기본적인 구성은 위와 같고요, 제일 위에 있는 CONNECT 버튼을 사용해서 아두이노와 연결을 할 생각입니다.





그러면, 블루투스를 연결할 수 있게 만들어야 겠죠?





우선 위의 사진처럼 manifest 파일을 통해 블루투스 권한을 줍시다.





그리고 당연히 블루투스가 연결되는 화면을 만들어야 하겠죠? 잘 보시면, 위의 바(bar)에 뒤로가기 모양 아이콘이 있는 것을 볼 수 있는데요, 이는 제가 블루투스를 연결하는 Activity를 Main Activity의 child 로 설정을 했기 때문입니다.


즉, Main Activity와 BlueToothConnection Activity 라는 두 Activity 를 별개가 아닌, Main Activity 아래에 다른 하나가 있게 했다는 것이죠. 따라서, 블루투스 연결 창에서 할일이 다 끝나고 나서 뒤로가기를 누르거나 위에 있는 뒤로가기 버튼을 누르면, 다시 상위에 있는 Main Activity로 이동하게 됩니다.



이렇게 두번째 Activity 에는 페어링 된 기기들의 목록이 뜰것이고, 이를 눌러 연결할 수 있게 만들것입니다.


다음에는 블루투스를 연결해봅시다.


+ Recent posts