11월, 2021의 게시물 표시

Android Bluetooth Low Energy(BLE) communication 2

이미지
사용 언어: Kotlin 1.6.0 사용 버전: Android Studio 2020.3.1 Patch 3 ​ 안드로이드 Bluetooth Low Energy(BLE) communication 2를 알아보겠습니다. ​ 저번 시간에 이어서 계속 진행해 보겠습니다. 우선 기본적인 흐름은 다음과 같습니다. 권한(Permission)을 획득한 다음 BluetoothAdapter를 이용해서 휴대폰의 Bluetooth 기능을 켜는 것입니다. 켜져 있으면 스캔을 시작합니다. BLE 기기를 찾게 되면 GATT server를 이용하여 연결을 합니다. 연결이 다 되면, 데이터를 전송할 수 있게 됩니다. ​ 1 편에서 권한 설정을 다 했으니, 이제 Bluetooth가 켜져 있는지 확인하는 과정을 해보겠습니다. BluetoothAdapter는 앱에 하나만 존재합니다. null을 반환하면 휴대폰이 블루투스를 지원하지 않는다는 뜻입니다. Android 12에서는 아래와 같은 방식으로 Adapter를 불러옵니다. 아래와 같은 방식으로 꺼져있는 블루투스 기능을 켤 수 있습니다. 하지만 위의 방법은 오래된 방법입니다. startActivityForResult가 Deprecated 되었기 때문입니다. 그래서 다른 방식으로 코드를 짜야 합니다. ​ registerForActivityResult()를 사용합니다. 블루투스 기능을 끄고 실행하면 아래와 같은 화면이 나타납니다. 여기서 잠깐 BLE의 중요한 용어와 개념을 알아보겠습니다. 영어를 제가 번역한 거라 잘못된 내용이 있을 수 있습니다. - Generic Attribute Profile (GATT) ...

Android Bluetooth Low Energy(BLE) communication 1

이미지
사용 언어: Kotlin 1.6.0 사용 버전: Android Studio 2020.3.1.Patch 3 ​ 안드로이드 Bluetooth Low Energy(BLE) communication 1을 알아보겠습니다. ​ 요즘 나오는 안드로이드에는 Bluetooth Classic과 Bluetooth Low Energy가 모두 포함되어 있습니다. ​ Bluetooth Low Energy는 줄여서 BLE라고도 부릅니다. ​ 그럼 Bluetooth Classic과 Bluetooth Low Energy의 차이를 간단히 알려드리겠습니다. Classic과 Low Energy의 큰 차이는 데이터의 전송량이라고 생각하시면 됩니다. Classic은 음악 재생과 같은 큰 용량을 무선으로 전송하는 기술이고, Low Energy의 경우는 작은 양의 데이터를 전송합니다. 어떤 사람은 티스푼 1 술 정도의 크기라고 비유하더군요. 그래서 Low Energy는 IoT 같이 저전력으로 오래 작동되어야 하는 기기에 많이 사용됩니다. Low Energy와 Classic은 전혀 다른 프로토콜을 사용하므로 두 개의 모듈은 직접적으로 통신할 수 없습니다. 즉, Low Energy로 Classic과 통신할 수 없습니다. 또는 반대의 경우, Classic으로 Low Energy와 통신할 수 없습니다. ​ 자 이제 그럼 본격적으로 BLE 통신을 알아보겠습니다. BLE를 사용하기 위해서는 먼저 permission이 필요합니다. https://developer.android.com/guide/topics/connectivity/bluetooth/permissions 만약 BLE가 앱 사용에 필수적이라면, uses-features를 통해서 BLE가 지원 안되는 휴대폰으로는 GooglePlay에서 설치가 안 되게 설정할 수 있습니다. Manifest에 <uses-feature andro...

Android Convert millisecond to time format

이미지
사용 언어: Kotlin 1.5.31 사용 버전: Android Studio 2020.3.1 Patch 3 ​ 안드로이드 Convert millisecond to time format을 알아보겠습니다. Millisecond 형식을 시간 형식인 00:00:00으로 변경하는 방법입니다. 우선 초, 분, 시간을 계산합니다. String.format() 함수를 사용하여 00:00:00 형식으로 변환합니다. 아래 코드는 타이머를 활용한 시간 표현입니다. 실행해 보겠습니다. 끝. 카테고리: Android

Android Repeat task with time interval

이미지
사용 언어: Kotlin 1.5.31 사용 버전: Android Studio 2020.3.1 Patch 3 ​ 안드로이드 Repeat task with time interval을 알아보겠습니다. 안드로이드에서 동일한 시간 간격으로 무엇인가 작동되게 하려면 다음과 같이 사용합니다. ​ ​ TimerTask를 사용하는 방법과 Handler를 사용하는 방법이 있습니다. TimerTask는 사람들이 추천하지 않아서, Handler를 사용하는 방법만 알아보겠습니다. ​ Handler와 Runable을 만듭니다. 위의 코드는 3 초마다 Hi라는 글자가 Toast로 나오게 만드는 코드입니다. ​ ​ 코드의 시작은 handler.post()로 시작합니다. 코드의 종료는 handler.removeCallbacks(runnableCode)로 종료합니다. 실행해 보겠습니다. 끝. 카테고리: Android

Android Record AVD video has a flicker

이미지
사용 언어: Kotlin 1.5.31 사용 버전: Android Studio 2020.3.1 Patch 3 ​ 안드로이드 Record AVD video has a flicker를 알아보겠습니다. 안드로이드 가상 기기 AVD를 이용해서 영상을 찍게 되면 깜빡임이 생기게 됩니다. 아래를 보시죠. 정말 난감합니다. ​ ​ 그래서 다음과 같은 조치가 필요합니다. 우선 AVD가 저장된 위치로 갑니다. ​ 경로는 다음과 같습니다. C:\Users\[각자 설정한 이름]\.android\avd 여기에 자기가 사용하는 AVD 폴더로 갑니다. ​ 폴더에 자세히 찾아보면 config.ini이 있습니다. 위의 파일을 텍스트 편집기(예: 연습장) 등으로 열어줍니다. 잘 찾아보면 hw.gpu.mode라는 부분이 있는데 이 부분이 현재는 auto로 되어 있습니다. 이 auto를 guest로 변경해 줍니다. ​ 이제 저장을 하고 휴대폰을 다시 실행해 줍니다. 동영상을 찍게 되면 깔끔하게 잘 찍힙니다. 끝. 카테고리: Android

Android Use CountDownTimer

이미지
사용 언어: Kotlin 1.5.31 사용 버전: Android Studio 2020.3.1 Patch 3 ​ 안드로이드 Use CountDownTimer를 알아보겠습니다. 안드로이드에서는 시간을 설정하면 숫자가 감소하는 CountDownTimer를 구현해놨습니다. ​ 사용법은 다음과 같습니다. CountDownTimer([끝날 최종 밀리 초], [onTick이 실행될 간격 밀리 초]) 밑에 예제는 5 초가 끝날 시간이고, onTick이 실행될 간격은 1 초입니다. 5 초가 지나면 onFinish가 실행됩니다. 실행해 보겠습니다. 끝. 카테고리: Android