BluetoothAdapter — 정의, 메서드 및 Android에서 Bluetooth 관리

저자: IT Sectr 게시일: 2026-07-16 읽는 시간: 10 분

BluetoothAdapter는 장치의 로컬 Bluetooth 어댑터를 나타내는 시스템 Android 클래스입니다. BluetoothAdapter는 Android에서 모든 Bluetooth 작업의 진입점입니다: 라디오 켜기(enable), 장치 스캔, 가시성 관리(setScanMode), 어댑터 정보 가져오기(getName, getAddress, getState). 이 클래스는 BluetoothManager.getAdapter()(API 18+) 또는 BluetoothAdapter.getDefaultAdapter()를 통해 사용할 수 있습니다. Bluetooth 모듈이 없는 장치에서 getDefaultAdapter()는 null을 반환합니다. Android Developers, 2026에 따르면 BluetoothAdapter는 API 5부터 Android에서 모든 BLE 애플리케이션에 필수 구성 요소입니다.

주요 사항

  • BluetoothAdapter는 장치의 로컬 Bluetooth 어댑터를 관리하기 위한 시스템 Android 클래스입니다
  • getDefaultAdapter()는 인스턴스를 가져오는 정적 메서드입니다. Bluetooth가 없는 장치에서 null을 반환합니다
  • getBluetoothLeScanner()는 최신 BLE 스캐너(API 21+)에 액세스하는 메서드입니다
  • enable/disable은 Bluetooth 라디오를 켜고 끄는 메서드입니다(BLUETOOTH_ADMIN 권한 필요)
  • startDiscovery/startLeScan은 클래식 및 BLE 스캔 메서드입니다(LE Scan은 더 이상 사용되지 않음, BluetoothLeScanner 사용)

BluetoothAdapter란: 본질 및 인스턴스 가져오기

BluetoothAdapter는 Android 장치의 물리적 Bluetooth 어댑터를 나타냅니다. 각 장치에는 정확히 하나의 어댑터가 있습니다(여러 Bluetooth 칩이 있는 Android Automotive는 예외이며 BluetoothManager.getAdapterList()를 사용합니다). BluetoothAdapter는 라디오 상태를 캡슐화합니다: STATE_OFF(0), STATE_TURNING_ON(1), STATE_ON(2), STATE_TURNING_OFF(3). 상태는 ACTION_STATE_CHANGED의 BroadcastReceiver를 통해 추적됩니다.

BluetoothAdapter 인스턴스를 가져오는 것은 Android에서 BLE 애플리케이션의 첫 번째 단계입니다. 권장되는 방법은 API 18+부터 BluetoothManager.getAdapter()를 통하는 것입니다. 대안은 정적 메서드 BluetoothAdapter.getDefaultAdapter()이며, API 5부터 작동하지만 덜 유연합니다. 두 메서드 모두 장치에 Bluetooth 모듈이 없는 경우(Wi-Fi 전용 태블릿, 에뮬레이터) null을 반환합니다. null 검사는 필수입니다: 애플리케이션은 정상적으로 종료되거나 BLE 기능을 비활성화해야 합니다.

kotlin
// BluetoothAdapter 가져오기(권장)
import android.bluetooth.BluetoothAdapter
import android.bluetooth.BluetoothManager
import android.content.Context

class BluetoothHelper(context: Context) {

    private val bluetoothAdapter: BluetoothAdapter?

    init {
        // 방법 1: BluetoothManager를 통해(API 18+)
        val manager = context.getSystemService(Context.BLUETOOTH_SERVICE)
                as BluetoothManager?
        bluetoothAdapter = manager?.adapter

        // 방법 2: 정적 메서드를 통해(API 5+)
        // val adapter = BluetoothAdapter.getDefaultAdapter()

        // null 검사
        if (bluetoothAdapter == null) {
            // 장치가 Bluetooth를 지원하지 않음
        }
    }

    // Bluetooth 상태 확인
    fun isBluetoothEnabled(): Boolean {
        return bluetoothAdapter?.isEnabled == true
    }

    // 어댑터 정보 가져오기
    fun getAdapterInfo(): Map<String, String> {
        return mapOf(
            "name" to (bluetoothAdapter?.name ?: "N/A"),
            "address" to (bluetoothAdapter?.address ?: "N/A"),
            "state" to (bluetoothAdapter?.state?.toString() ?: "N/A"),
            "scanMode" to (bluetoothAdapter?.scanMode?.toString() ?: "N/A")
        )
    }
}

BluetoothHelper 클래스는 BluetoothManager를 통해 BluetoothAdapter를 가져온 후 null 검사를 수행하는 방법을 보여줍니다. isBluetoothEnabled는 isEnabled를 확인합니다 — 모든 BLE 작업 전 필수 조건입니다. getAdapterInfo는 장치 이름, MAC 주소, 상태 및 가시성 모드를 반환합니다. 중요: Android 10+(API 29+)에서 애플리케이션에 BLUETOOTH_ADMIN 및 ACCESS_FINE_LOCATION 권한이 없는 경우 시스템 서비스는 가짜 MAC 주소(02:00:00:00:00:00)를 반환합니다.

BluetoothAdapter 주요 메서드: enable, disable, getState, getAddress

BluetoothAdapter는 Bluetooth 라디오를 제어하는 메서드를 제공합니다. enable()과 disable()은 Bluetooth를 켜고 끕니다. 두 메서드 모두 BLUETOOTH_ADMIN 권한이 필요하며 비동기적으로 실행됩니다: enable()을 호출하면 시스템이 라디오 활성화 프로세스를 시작하고 상태는 BluetoothAdapter.ACTION_STATE_CHANGED 작업과 함께 BroadcastReceiver를 통해 추적됩니다. Android 10+에서는 enable()과 disable()에 추가 시스템 권한이 필요합니다 — 일반 애플리케이션은 사용자 대화 상자 없이 프로그래밍 방식으로 Bluetooth를 제어할 수 없습니다.

getState()는 현재 어댑터 상태를 반환합니다: STATE_OFF(10), STATE_TURNING_ON(11), STATE_ON(12), STATE_TURNING_OFF(13). getAddress()는 Bluetooth 어댑터의 MAC 주소를 반환합니다. Android 6+에서는 MAC 주소를 요청하기 위해 ACCESS_FINE_LOCATION(또는 API 31+의 경우 ACCESS_COARSE_LOCATION)이 필요합니다. Android 10+에서는 getAddress()가 상수 주소 02:00:00:00:00:00을 반환합니다 — 실제 주소는 공개 API를 통해 사용할 수 없습니다.

getScanMode()는 어댑터의 가시성 모드를 결정합니다: SCAN_MODE_NONE(보이지 않음), SCAN_MODE_CONNECTABLE(연결된 장치에 보임), SCAN_MODE_CONNECTABLE_DISCOVERABLE(모두에게 보임). 가시성 모드는 보안을 위해 시간 제한이 있습니다(일반적으로 60~300초). setScanMode()를 통해 모드를 설정하려면 Android 10+에서 BLUETOOTH_ADMIN 및 시스템 권한이 필요합니다.

메서드설명필요한 권한
enable()Bluetooth 라디오 켜기BLUETOOTH_ADMIN
disable()Bluetooth 라디오 끄기BLUETOOTH_ADMIN
getState()현재 어댑터 상태BLUETOOTH
getAddress()어댑터 MAC 주소BLUETOOTH + ACCESS_FINE_LOCATION(API 23+)
getScanMode()장치 가시성 모드BLUETOOTH
setScanMode()가시성 모드 설정BLUETOOTH_ADMIN

장치 스캔: startDiscovery 및 BluetoothLeScanner

BluetoothAdapter는 두 가지 유형의 스캔을 지원합니다. 클래식 Bluetooth 스캔(BR/EDR)은 startDiscovery()를 통해 시작됩니다 — 전화기와 헤드셋을 포함한 모든 유형의 Bluetooth 장치를 발견합니다. 결과는 BluetoothDevice.ACTION_FOUND 작업과 함께 BroadcastReceiver를 통해 반환됩니다. startDiscovery()는 12초 동안 실행되며 cancelDiscovery()를 호출하여 취소할 수 있습니다. 이 메서드는 BLE에서 더 이상 사용되지 않습니다 — BluetoothLeScanner를 사용하세요.

BluetoothAdapter를 통한 BLE 스캔은 더 이상 사용되지 않는 메서드 startLeScan(LeScanCallback)을 사용합니다. API 21부터 Google은 BluetoothAdapter.getBluetoothLeScanner()를 통해 가져오는 BluetoothLeScanner 사용을 권장합니다. BluetoothLeScanner는 더 유연한 API를 제공합니다: ScanSettings를 통한 스캔 구성(모드, 콜백 유형, 일치 모드), ScanFilter를 통한 필터링(서비스 UUID, 장치 이름, MAC 주소별), 백그라운드 스캔을 위한 PendingIntent 지원.

kotlin
// 이전(사용되지 않음) BLE 스캔 API vs 새 API
import android.bluetooth.BluetoothAdapter
import android.bluetooth.le.*

class BLEScanner(private val bluetoothAdapter: BluetoothAdapter?) {

    // 사용되지 않음: startLeScan(API 18+, API 21)
    @Suppress("DEPRECATION")
    fun legacyScan() {
        bluetoothAdapter?.startLeScan { device, rssi, scanRecord ->
            print("Found (LE Scan): $device.name, RSSI: $rssi")
        }
    }

    // 새로움: BluetoothLeScanner(API 21+)
    fun modernScan() {
        val scanner = bluetoothAdapter?.bluetoothLeScanner
            ?: return

        // 스캔 설정
        val settings = ScanSettings.Builder()
            .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
            .setCallbackType(ScanSettings.CALLBACK_TYPE_ALL_MATCHES)
            .setMatchMode(ScanSettings.MATCH_MODE_AGGRESSIVE)
            .build()

        // 서비스별 필터(심박수 UUID)
        val filters = listOf(
            ScanFilter.Builder()
                .setServiceUuid(ParcelUuid.fromString("0000180D-0000-1000-8000-00805F9B34FB"))
                .build()
        )

        // 스캔 시작
        scanner.startScan(filters, settings, object : ScanCallback() {
            override fun onScanResult(callbackType: Int, result: ScanResult) {
                val device = result.device
                val rssi = result.rssi
                print("Found (BLE Scanner): ${device.name}, RSSI: $rssi, address: ${device.address}")
            }

            override fun onScanFailed(errorCode: Int) {
                print("Scan error: $errorCode")
            }
        })
    }
}

BLEScanner 클래스는 더 이상 사용되지 않는 startLeScan과 최신 BluetoothLeScanner를 비교합니다. legacyScan에서 LeScanCallback은 BluetoothDevice, RSSI 및 원시 scanRecord를 받습니다. modernScan에서는 LOW_LATENCY 모드(최대 발견 속도)의 ScanSettings와 심박수 서비스 UUID(0x180D)로 필터링하는 ScanFilter가 사용됩니다. ScanCallback은 확장된 정보가 포함된 ScanResult 객체를 제공합니다: 이름, RSSI, 광고 데이터, 연결 유형.

BluetoothManager: BluetoothAdapter에 액세스하는 최신 API

BluetoothManager는 Bluetooth 작업을 관리하기 위해 API 18(Android 4.3)에 도입된 시스템 Android 서비스입니다. API 18 이전에는 BluetoothAdapter를 가져오는 유일한 방법은 정적 메서드 getDefaultAdapter()였습니다. BluetoothManager는 다음을 제공합니다: adapter — BluetoothAdapter 인스턴스, getConnectedDevices() — 연결된 장치 목록, getDevicesMatchingConnectionStates() — 상태별 필터링. BluetoothManager는 이전 API에서 BluetoothLeScanner를 가져오는 데도 사용됩니다.

BluetoothManager의 장점 BluetoothAdapter.getDefaultAdapter()를 직접 호출하는 것보다: 애플리케이션이 정적 싱글톤에 의존하지 않으며, 관리자가 컨텍스트(Activity/Application)를 존중합니다. 이는 Android Enterprise의 다중 계정 시나리오에서 중요합니다. 여러 Bluetooth 칩이 있는 Android Automotive에서 BluetoothManager.getAdapterList()는 모든 사용 가능한 어댑터를 반환합니다 — BluetoothAdapter.getDefaultAdapter()는 첫 번째 것만 반환합니다.

kotlin
// BLE에 BluetoothManager 사용
class BLEConnection(context: Context) {

    private val bluetoothManager: BluetoothManager =
        context.getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager

    private val adapter: BluetoothAdapter? = bluetoothManager.adapter

    // 연결된 BLE 장치 목록 가져오기
    fun getConnectedDevices(): List<BluetoothDevice> {
        return bluetoothManager.getConnectedDevices(
            BluetoothProfile.GATT
        )
    }

    // 상태별 장치 필터링
    fun getDevicesByState(states: IntArray): List<BluetoothDevice> {
        return bluetoothManager.getDevicesMatchingConnectionStates(
            BluetoothProfile.GATT, states
        )
    }

    // 장치에서 BLE 지원 확인
    fun isBLESupported(): Boolean {
        return adapter != null && context.packageManager
            .hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)
    }

    // 시스템 대화 상자를 통해 Bluetooth 활성화 요청
    fun requestEnableBluetooth(activity: MainActivity) {
        if (adapter?.isEnabled == false) {
            val intent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)
            activity.startActivityForResult(intent, REQUEST_ENABLE_BT)
        }
    }

    companion object {
        const val REQUEST_ENABLE_BT = 1001
    }
}

BLEConnection 클래스는 BluetoothManager를 사용하여 BluetoothAdapter에 액세스하고 연결된 GATT 장치 목록을 가져옵니다. isBLESupported는 PackageManager.hasSystemFeature(FEATURE_BLUETOOTH_LE)를 통해 BLE 라디오 존재를 확인합니다 — BLE 없는 Bluetooth Classic 장치에 중요한 검사입니다. requestEnableBluetooth는 Bluetooth를 켜는 시스템 대화 상자(ACTION_REQUEST_ENABLE)를 표시하며 BLUETOOTH_ADMIN 권한이 필요하지 않습니다 — 이것은 시스템 앱 없이 Android 10+에서 Bluetooth를 켜는 유일한 합법적인 방법입니다.

BluetoothAdapter 작업을 위한 Android 권한

권한 BluetoothAdapter의 권한은 각 Android 버전과 함께 발전해 왔습니다. Android 6~11(API 23~30)에서는 BLE 스캔에 BLUETOOTH, BLUETOOTH_ADMIN 및 ACCESS_FINE_LOCATION이 필수입니다. Android 12+(API 31+)에서 Google은 권한을 분할했습니다: ACCESS_FINE_LOCATION은 BLUETOOTH_SCAN(스캔), BLUETOOTH_CONNECT(연결), BLUETOOTH_ADVERTISE(광고)로 대체됩니다. BLE 장치 발견을 위해서는 BLUETOOTH_SCAN으로 충분하며 위치는 필요하지 않습니다.

권한 표 Android 버전별:

작업API 23–30API 31+
BLE 스캔ACCESS_FINE_LOCATIONBLUETOOTH_SCAN(위치 없음)
BLE 연결ACCESS_FINE_LOCATIONBLUETOOTH_CONNECT
BLE 광고ACCESS_FINE_LOCATIONBLUETOOTH_ADVERTISE
켜기/끄기BLUETOOTH_ADMINBLUETOOTH_ADMIN(시스템)
MAC 주소 가져오기ACCESS_FINE_LOCATIONBLUETOOTH_CONNECT(가짜 주소)

Android 12+에서 모든 Bluetooth 권한은 런타임 권한입니다 — ActivityResultContracts.RequestMultiplePermissions를 통해 런타임에 요청해야 합니다. BLUETOOTH_SCAN과 BLUETOOTH_ADVERTISE는 NEARBY_DEVICES 그룹에 속하고 BLUETOOTH_CONNECT는 같은 그룹에 속합니다. BLUETOOTH와 BLUETOOTH_ADMIN 권한은 API < 31과의 호환성을 위해 매니페스트에 남아 있지만 API 31+에서는 무시됩니다 — Google은 새 권한을 명시적으로 지정해야 합니다.

kotlin
// Android 12+에서 Bluetooth 권한 요청
import android.Manifest
import android.content.pm.PackageManager
import android.os.Build
import androidx.core.content.ContextCompat

class PermissionHelper(context: Context) {

    fun getRequiredPermissions(): Array<String> {
        return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
            // Android 12+: BLE-
            arrayOf(
                Manifest.permission.BLUETOOTH_SCAN,
                Manifest.permission.BLUETOOTH_CONNECT,
                Manifest.permission.BLUETOOTH_ADVERTISE
            )
        } else {
            // Android 6-11: BLE
            arrayOf(
                Manifest.permission.ACCESS_FINE_LOCATION,
                Manifest.permission.BLUETOOTH,
                Manifest.permission.BLUETOOTH_ADMIN
            )
        }
    }

    // 모든 권한 확인
    fun hasPermissions(context: Context): Boolean {
        return getRequiredPermissions().all { permission ->
            ContextCompat.checkSelfPermission(context, permission)
                    == PackageManager.PERMISSION_GRANTED
        }
    }
}

PermissionHelper 클래스는 API 수준에 따라 올바른 권한 세트를 반환합니다. Android 12+에서는 위치 없이 BLUETOOTH_SCAN, BLUETOOTH_CONNECT, BLUETOOTH_ADVERTISE가 사용됩니다. Android 6~11에서는 BLE 스캔에 여전히 ACCESS_FINE_LOCATION이 필요합니다. 개발자는 ActivityResultContracts 또는 RxPermissions를 통해 권한을 요청할 때 두 시나리오를 모두 고려해야 합니다.

Kotlin의 BluetoothAdapter 전체 예제

전체 예제 BluetoothAdapter를 사용하여 BLE 장치를 스캔, 연결 및 데이터를 읽는 Kotlin의 BLE 애플리케이션입니다. 예제는 권한 확인, 어댑터 가져오기, BluetoothLeScanner를 통한 스캔, BluetoothDevice.connectGatt를 통한 연결을 다룹니다.

kotlin
// Kotlin의 전체 BLE 관리자
class BLEManager(private val context: Context) {

    private val bluetoothManager: BluetoothManager =
        context.getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager
    private val adapter: BluetoothAdapter? = bluetoothManager.adapter
    private var scanner: BluetoothLeScanner? = adapter?.bluetoothLeScanner
    private var gatt: BluetoothGatt? = null

    // 1. 서비스 검색
    fun canScan(): Boolean {
        return adapter?.isEnabled == true
                && scanner != null
                && PermissionHelper(context).hasPermissions(context)
    }

    // 2. 필터 포함
    fun startScanning(callback: (BluetoothDevice, Int) -> Unit) {
        if (!canScan()) return

        val settings = ScanSettings.Builder()
            .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
            .setReportDelay(0)
            .build()

        scanner?.startScan(null, settings, object : ScanCallback() {
            override fun onScanResult(callbackType: Int, result: ScanResult) {
                callback(result.device, result.rssi)
            }
        })
    }

    // 3. 스캔 중지
    fun stopScanning() {
        scanner?.stopScan(object : ScanCallback() {})
    }

    // 4. BLE 장치에 연결
    fun connectToDevice(device: BluetoothDevice) {
        if (adapter?.isEnabled != true) return

        gatt = device.connectGatt(
            context,
            false,
            object : BluetoothGattCallback() {
                override fun onConnectionStateChange(gatt: BluetoothGatt, status: Int, newState: Int) {
                    if (newState == BluetoothProfile.STATE_CONNECTED) {
                        gatt.discoverServices()
                    }
                }

                override fun onServicesDiscovered(gatt: BluetoothGatt, status: Int) {
                    // 서비스를 찾았습니다, 특성을 읽을 수 있습니다
                }
            },
            BluetoothDevice.TRANSPORT_LE
        )
    }

    // 5. 리소스 해제
    fun disconnect() {
        gatt?.disconnect()
        gatt?.close()
        gatt = null
    }
}

BLEManager 클래스는 Android에서 완전한 BLE 주기를 통합합니다: 어댑터 및 권한 확인(canScan), ScanSettings와 함께 BluetoothLeScanner를 통한 스캔(startScanning), TRANSPORT_LE와 함께 BluetoothDevice.connectGatt를 통한 연결(connectToDevice), 리소스 해제(disconnect). 모든 BLE 작업은 UI 스레드에서 실행됩니다 — Android는 기본 스레드에서 BluetoothGattCallback 콜백을 호출합니다. 성능이 중요한 BLE 작업의 경우 GATT 작업을 백그라운드 HandlerThread로 오프로드하는 것이 좋습니다.

자주 묻는 질문

Android에서 BluetoothAdapter란 무엇인가요?

BluetoothAdapter는 Android 장치의 로컬 Bluetooth 어댑터를 나타내는 클래스입니다. BluetoothManager.getAdapter()(API 18+) 또는 BluetoothAdapter.getDefaultAdapter()를 통해 가져옵니다. Bluetooth 켜기/끄기, 장치 스캔, 가시성 관리 및 어댑터 정보 가져오기 메서드를 제공합니다. Bluetooth 모듈이 없는 장치에서 null을 반환합니다.

BluetoothAdapter.getDefaultAdapter()가 null을 반환하는 이유는 무엇인가요?

이유는 장치에 Bluetooth 라디오가 없기 때문입니다. Wi-Fi 전용 태블릿, Android 에뮬레이터 및 Bluetooth 없는 Android TV에서 일반적입니다. 앱 시작 시 getDefaultAdapter()가 null인지 확인하고 어댑터가 없으면 BLE 기능을 비활성화하세요. 더 정확한 감지를 위해 PackageManager.hasSystemFeature(FEATURE_BLUETOOTH_LE)를 통한 확인이 대안입니다.

BluetoothLeScanner와 startLeScan의 차이점은 무엇인가요?

BluetoothLeScanner(API 21+)는 ScanFilter, ScanSettings 및 PendingIntent를 지원하는 BLE 스캔용 최신 API입니다. startLeScan(API 18+)은 제한된 데이터 세트로 LeScanCallback을 수락하는 더 이상 사용되지 않는 BluetoothAdapter 메서드입니다. Google은 모든 새 프로젝트에 BluetoothLeScanner를 권장하며 UUID로 필터링, 전력 소비 모드 구성 및 PendingIntent를 통한 백그라운드 작동이 가능합니다.

Android 12+에서 BLE에 필요한 권한은 무엇인가요?

Android 12+(API 31)에서 BLE 스캔에는 BLUETOOTH_SCAN, 연결에는 BLUETOOTH_CONNECT, 광고에는 BLUETOOTH_ADVERTISE가 필요합니다. 위치 권한 ACCESS_FINE_LOCATION은 BLE에 더 이상 필요하지 않습니다. Android 6~11에서는 ACCESS_FINE_LOCATION이 필요합니다. 모든 권한은 ActivityResultContracts를 통해 런타임에 요청됩니다.

대화 상자 없이 프로그래밍 방식으로 Bluetooth를 켤 수 있나요?

Android 10+에서 시스템 대화 상자 없이 프로그래밍 방식으로 Bluetooth를 켜는 것은 BLUETOOTH_PRIVILEGED 권한이 있는 시스템 앱만 가능합니다. 일반 앱은 Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)와 startActivityForResult를 사용해야 합니다 — 사용자가 시스템 대화 상자에서 켜기를 확인합니다. 매니페스트의 BLUETOOTH_ADMIN은 Android 10+에서 enable() 권한을 부여하지 않습니다.

요약

  • BluetoothAdapter는 Android에서 모든 Bluetooth 작업의 진입점이며 BluetoothManager 또는 getDefaultAdapter()를 통해 가져옵니다
  • getState()isEnabled는 BLE 작업 전 Bluetooth 라디오 상태의 기본 검사입니다
  • BluetoothLeScanner(API 21+)는 ScanFilter, ScanSettings 및 PendingIntent 지원으로 더 이상 사용되지 않는 startLeScan을 대체합니다
  • BluetoothManager는 다중 계정 시나리오 및 Automotive를 지원하는 BluetoothAdapter 획득의 최신 방법입니다
  • 권한이 발전했습니다: ACCESS_FINE_LOCATION(API 23-30) → BLUETOOTH_SCAN/CONNECT/ADVERTISE(API 31+)
  • enable()/disable() — Android 10+에서 일반 앱의 경우 시스템 대화 상자 ACTION_REQUEST_ENABLE을 통해서만
  • connectGatt는 BluetoothGattCallback을 통해 BLE 주변 장치와 GATT 연결을 설정하는 BluetoothDevice 메서드입니다

턴키 방식의 모바일 애플리케이션을 개발해 드립니다

IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.

프로젝트 논의

더 읽어보기