Initializing the BLE Library
BLE 라이브러리 초기화 중
Now it’s time to get into the actual implementation of things.
이제 실제 구현에 들어갈 시간입니다.
The first time through (to emphasize the BLE aspect of the programming without getting too far into the GUI side of things), the example will mainly print out information received over Bluetooth Low Energy.
처음에는 (GUI 측면으로 너무 깊이 들어가지 않고 프로그래밍의 BLE 측면을 강조하기 위해) 예제는 주로 Bluetooth Low Energy를 통해 수신된 정보를 인쇄합니다.
After that, you’ll add some GUI features incorporate the BLE data into the presentation side of things.
그런 다음 BLE 데이터를 프레젠테이션 측면에 통합하는 일부 GUI 기능을 추가합니다.
Before you begin, you’ll need to create an instance of the BleWrapper library you imported.
시작하기 전에 가져온 BleWrapper 라이브러리의 인스턴스를 생성해야 합니다.
This is the file from the Bluetooth Application Accelerator library from the Bluetooth SIG:
이것은 Bluetooth SIG의 Bluetooth 애플리케이션 가속기 라이브러리에 있는 파일입니다:
The line added in this file will hold the instance of the BleWrapper class, which will also contain the methods you’ll be using to access the underlying Android BLE library.
이 파일에 추가된 라인은 BleWrapper 클래스의 인스턴스를 보유하며, 여기에는 기본 Android BLE 라이브러리에 액세스하는 데 사용할 메서드도 포함됩니다.
In your constructor, you’ll also be adding various callbacks that you’ll need to handle events from the Android BLE library.
생성자에는 Android BLE 라이브러리의 이벤트를 처리하는 데 필요한 다양한 콜백도 추가하게 됩니다.
In the previous code snippet, notice an automatically generated function called onCreate().
이전 코드 조각에서 onCreate()라는 자동 생성된 함수를 확인하세요.
This function is called when the application first starts and you’ll use it to initialize things that need to be initialized on startup and only once.
이 함수는 애플리케이션이 처음 시작될 때 호출되며 시작 시 한 번만 초기화해야 하는 항목을 초기화하는 데 이 함수를 사용합니다.
This includes members that don’t need to be reinitialized if the device goes to sleep or loses context and then comes back.
여기에는 장치가 절전 모드로 전환되거나 컨텍스트를 잃었다가 다시 돌아올 경우 다시 초기화할 필요가 없는 멤버가 포함됩니다.
The Android documentation actually outlines an “activity lifecycle,” which describes the method as an app goes through different stages of its “life.”
Android 문서에는 실제로 앱이 "수명"의 여러 단계를 거치는 방법을 설명하는 "활동 수명 주기"가 설명되어 있습니다.
For example, when an app is started, three separate lifecycle methods get called: onCreate(), onStart(), and onResume().
예를 들어 앱이 시작되면 세 가지 별도의 수명 주기 메서드 (onCreate(), onStart() 및 onResume())가 호출됩니다.
Initializing variables inside an app class occurs in onCreate()when they’re initialized only once, and in onResume() when they need to be initialized again if the device goes to sleep or loses context.
앱 클래스 내부의 변수는 onCreate()에서 한 번만 초기화되고, 기기가 절전 모드로 전환되거나 컨텍스트를 잃어 다시 초기화해야 하는 경우 onResume()에서 초기화됩니다.
The documentation provides more information on this activity lifecycle, but it’s an important concept to know, because you’ll be doing part of the init routines in on Create() and part of them in onResume().
문서는 이 활동 수명 주기에 대한 자세한 정보를 제공하지만 Create()에서 초기화 루틴의 일부를 수행하고 onResume()에서 일부를 수행하므로 알아야 할 중요한 개념입니다.
You’ll also need to handle cleanup when you shut down, which will be in onPause() or onStop().
또한 종료할 때 onPause() 또는 onStop()에서 정리 작업을 처리해야 합니다.
Inside the onCreate() method, you’ll see some boilerplate code generated by the project wizard.
onCreate() 메서드 내에서 프로젝트 마법사가 생성한 일부 상용구 코드를 볼 수 있습니다.
Beneath that, you’ll be adding more code to initialize your mBleWrapper object and perform other init tasks:
그 아래에 mBleWrapper 객체를 초기화하고 다른 초기화 작업을 수행하기 위해 더 많은 코드를 추가하게 됩니다:
The preceding code allocates a new BleWrapper object to the mBleWrapper member variable (which previously was null) by instantiating it and calling its constructor.
앞의 코드는 인스턴스화하고 생성자를 호출하여 mBleWrapper 멤버 변수 (이전에는 null이었음)에 새 BleWrapper 체를 할당합니다.
When instantiating the wrapper, you also need to add the BLE callbacks as an argument to the Initializing the BLE constructor.
래퍼를 인스턴스화할 때 BLE 콜백을 BLE 생성자 초기화에 대한 인수로 추가해야 합니다.
This is where you add code to handle notification events that occur from the BLE stack.
여기에서 BLE 스택에서 발생하는 알림 이벤트를 처리하는 코드를 추가합니다.
In software programming, a callback is a reference to executable code passed in as an argument to a function, where the function is expected to callback the code after it’s done processing something.
소프트웨어 프로그래밍에서 콜백은 함수에 대한 인수로 전달된 실행 가능한 코드에 대한 참조입니다. 여기서 함수는 무언가 처리가 완료된 후 코드를 콜백할 것으로 예상됩니다.
For now, we won’t add any callbacks to the constructor, but we’ll revisit this later.
지금은 생성자에 콜백을 추가하지 않지만 나중에 다시 살펴보겠습니다.
After the constructor, the code performs a check to make sure the BLE hardware is available to the system.
생성자 이후 코드는 BLE 하드웨어를 시스템에서 사용할 수 있는지 확인하는 검사를 수행합니다.
If it’s not, a popup message window called “Toast” notifies the user about the missing BLE hardware and then shuts down the app.
그렇지 않은 경우 "Toast"라는 팝업 메시지 창을 통해 사용자에게 BLE 하드웨어 누락을 알리고 앱을 종료합니다.
That completes the code needed to execute when the app starts up in the onCreate() method.
이는 onCreate() 메서드에서 앱이 시작될 때 실행하는 데 필요한 코드를 완성합니다.
Now, to move to the onResume() method, which is where the code goes when it starts up and whenever it wakes from sleep:
이제 코드가 시작될 때와 절전 모드에서 깨어날 때마다 코드가 이동하는 onResume() 메서드로 이동하려면:
Eclipse provides a quick shortcut for any of these functions.
Eclipse는 이러한 기능에 대한 빠른 단축키를 제공합니다.
Just type the first few letters of the method name and then Ctrl+Spacebar.
메서드 이름의 처음 몇 글자를 입력한 다음 Ctrl+스페이스바를 누르세요.
Choose the function from the autocomplete list that pops up to let Eclipse build the function for you.
Eclipse에서 함수를 빌드할 수 있도록 팝업되는 자동 완성 목록에서 함수를 선택하세요.
Here, the boilerplate code is at the top with super.onResume().
여기서 상용구 코드는 super.onResume()과 함께 맨 위에 있습니다.
You’re going to add your own code beneath that.
그 아래에 자신만의 코드를 추가하게 됩니다.
In this case, you need to check if Bluetooth is enabled each time the device comes back from a different context or from sleep.
이 경우 장치가 다른 컨텍스트 또는 절전 모드에서 돌아올 때마다 Bluetooth가 활성화되어 있는지 확인해야 합니다.
While some other program is in use, Bluetooth might have been turned off.
다른 프로그램을 사용하는 중에 Bluetooth가 꺼졌을 수도 있습니다.
Not catching that change and just assuming Bluetooth was still on would eventually cause some type of malfunction or exception to the software.
해당 변경 사항을 파악하지 못하고 Bluetooth가 계속 켜져 있다고 가정하면 결국 소프트웨어에 일종의 오작동이나 예외가 발생하게 됩니다.
To handle this situation, if the program finds that Bluetooth Android Programming is off, it uses Android intents to send a request to the user to turn Bluetooth on and then exits the app.
이 상황을 처리하기 위해 프로그램은 Bluetooth Android 프로그래밍이 꺼져 있음을 발견하면 Android 인텐트를 사용하여 사용자에게 Bluetooth를 켜도록 요청을 보낸 다음 앱을 종료합니다.
The next time the app restarts, if Bluetooth is on, it can proceed.
다음에 앱을 다시 시작할 때 블루투스가 켜져 있으면 계속 진행할 수 있습니다.
Once the code gets past that last check, it can initialize the BleWrapper, which opens up the Bluetooth interface and gets an instance of the Android Bluetooth adapter.
코드가 마지막 검사를 통과하면 Bluetooth 인터페이스를 열고 Android Bluetooth 어댑터의 인스턴스를 가져오는 BleWrapper를 초기화할 수 있습니다.
Once you have this, you can access the BLE radio and protocol functions.
이 정보가 있으면 BLE 라디오 및 프로토콜 기능에 액세스할 수 있습니다.
Finally, you need to handle one last Android app lifecycle method: onPause().
마지막으로, 마지막 Android 앱 수명 주기 메서드인 onPause()를 처리해야 합니다.
This method gets called whenever context is lost, the device goes to sleep, or the app is shut down:
이 메서드는 컨텍스트가 손실되거나, 장치가 절전 모드로 전환되거나, 앱이 종료될 때마다 호출됩니다.
In our example, the Android device will act as a GAP central and a GATT client and the SensorTag device will be a GAP peripheral and a GATT server (see “Roles” on page 36 and “Roles” on page 51).
우리의 예에서 Android 기기는 GAP 센트럴과 GATT 클라이언트 역할을 하며 SensorTag 기기는 GAP 주변 장치와 GATT 서버 역할을 합니다 (36페이지의 "역할" 및 51페이지의 "역할" 참조).
Once again, the boilerplate code is kept on top.
다시 한번 상용구 코드가 맨 위에 유지됩니다.
After that, it calls two methods from the wrapper.
그 후 래퍼에서 두 가지 메서드를 호출합니다.
The first method allows you to “diconnect” (sic) our Android device from the remote device.
첫 번째 메서드를 사용하면 원격 장치에서 Android 장치를 "연결 해제"할 수 있습니다.
This actually disconnects from the remote peripheral device and also issues a call to the uiDeviceDisconnected() callback method.
이는 실제로 원격 주변 장치와의 연결을 끊고 uiDeviceDisconnected() 콜백 메서드를 호출합니다.
If you need to handle anything after you disconnect from the peripheral, you’d override the uiDeviceDiscon nected() callback.
주변 장치와의 연결을 끊은 후 무엇이든 처리해야 하는 경우 uiDeviceDisconnected() 콜백을 재정의합니다.
Finally, we close the BleWrapper, which closes the local GATT client and central completely.
마지막으로 BleWrapper를 닫으면 로컬 GATT 클라이언트와 중앙 클라이언트가 완전히 닫힙니다.