블루투스 기기 찾기

BluetoothAdapter를 사용하여 기기 검색을 통해서 또는 페어링된 기기 목록을 쿼리합니다

적절한 블루투스 권한이 있는지 확인합니다. 및 앱의 블루투스 설정을 참고하세요. 블루투스 장치 찾기를 시도해야 합니다.

기기 검색은 주변 지역을 검색하는 스캔 절차입니다. 블루투스 지원 기기에서 각 기기에 대한 몇 가지 정보를 요청합니다. 이 검색, 조회 또는 스캔이라고도 합니다. 근처에 있는 블루투스 기기는 다음과 같은 경우에만 검색 요청에 응답합니다. 검색 가능성을 통해 현재 정보 요청을 수락하고 있다는 의미입니다. 기기가 다음에 해당하는 경우 일부 정보를 공유하여 검색 요청에 응답하고 기기 이름, 클래스, 고유 MAC 주소 등 모든 정보를 수집합니다. 사용 정보를 수집하면 검색 프로세스를 수행 중인 장치는 사용하여 검색된 장치에 대한 연결을 시작합니다.

검색 가능한 기기에서는 사용자의 위치에 관한 정보를 표시할 수 있으므로 기기 검색 프로세스에 위치 액세스가 필요한 경우 앱이 사용 중인 경우 를 실행하는 기기에서 Android 8.0 (API 수준 26) 이상을 실행하는 경우 호환 기기 관리도구 API를 대신 사용하세요. 이 API 앱을 대신하여 기기 검색을 수행하므로 위치 정보 액세스 권한을 요청합니다.

원격 기기와 처음으로 연결되면 페어링이 요청이 자동으로 사용자에게 제공됩니다 기기가 페어링되면 기기에 대한 기본 정보(기기의 이름, 클래스, MAC 등) 주소—저장되고 Bluetooth API를 사용하여 읽을 수 있습니다. 알려진 MAC 사용 언제든지 해당 기기로 연결을 시작할 수 있습니다. 디바이스가 여전히 범위 내에 있다고 가정하여 검색을 수행하지 않고

페어링된 것과 연결된 것에는 차이점이 있습니다.

  • 페어링은 두 기기가 서로의 존재를 알고 있다는 의미입니다. 인증에 사용할 수 있고 서로 암호화된 연결을 설정합니다.
  • 연결됨은 기기가 현재 RFCOMM 채널을 공유하고 있으며 서로 데이터를 전송할 수 있습니다. 현재 블루투스 API를 사용하려면 먼저 기기를 페어링해야 RFCOMM 연결이 가능함 있습니다. 암호화된 이메일 전송을 시작하면 페어링이 자동으로 블루투스 API와의 연결입니다.

다음 섹션에서는 페어링된 기기 및 페어링된 기기를 찾는 방법을 설명합니다. 기기 검색을 사용하여 새 기기를 검색하는 방법

페어링된 기기 쿼리

기기 검색을 수행하기 전에 페어링된 기기 집합을 쿼리하는 것이 좋습니다. 원하는 기기가 이미 있는지 확인할 수 있습니다. getBondedDevices()를 호출하면 됩니다. 이렇게 하면 BluetoothDevice 객체 페어링된 기기를 나타냅니다. 예를 들어 페어링된 모든 기기를 쿼리하고 다음 코드 스니펫과 같이 각 기기의 이름과 MAC 주소를 가져옵니다. 다음을 보여줍니다.

Kotlin

val pairedDevices: Set<BluetoothDevice>? = bluetoothAdapter?.bondedDevices
pairedDevices?.forEach { device ->
   val deviceName = device.name
   val deviceHardwareAddress = device.address // MAC address
}

자바

Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices();

if (pairedDevices.size() > 0) {
   // There are paired devices. Get the name and address of each paired device.
   for (BluetoothDevice device : pairedDevices) {
       String deviceName = device.getName();
       String deviceHardwareAddress = device.getAddress(); // MAC address
   }
}

블루투스 기기와의 연결을 시작하려면 연결된 BluetoothDevice 객체는 MAC 주소이며 통화 getAddress()블루투스 연결에서 연결을 만드는 방법에 대해 자세히 알아보세요. 기기를 참고하세요.

기기 검색

기기 검색을 시작하려면 startDiscovery() 이 프로세스는 비동기적이며 탐색이 시작되었습니다. 탐색 프로세스에는 일반적으로 약 12초 동안 조회 스캔을 수행한 후 발견된 각 기기의 페이지를 스캔합니다. 검색합니다.

검색된 각 기기에 대한 정보를 수신하려면 앱에서 BroadcastReceiver 드림 대상 ACTION_FOUND 인텐트를 지정할 수 있습니다. 시스템이 각 기기에 대하여 이 인텐트를 브로드캐스트합니다. 인텐트에는 다음이 포함됩니다. 추가 필드 EXTRA_DEVICEEXTRA_CLASS 다음으로 BluetoothDeviceBluetoothClass를 선택합니다. 다음 코드 스니펫은 브로드캐스트를 처리하도록 등록하는 방법을 보여줍니다. 다음과 같습니다.

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
   ...

   // Register for broadcasts when a device is discovered.
   val filter = IntentFilter(BluetoothDevice.ACTION_FOUND)
   registerReceiver(receiver, filter)
}

// Create a BroadcastReceiver for ACTION_FOUND.
private val receiver = object : BroadcastReceiver() {

   override fun onReceive(context: Context, intent: Intent) {
       val action: String = intent.action
       when(action) {
           BluetoothDevice.ACTION_FOUND -> {
               // Discovery has found a device. Get the BluetoothDevice
               // object and its info from the Intent.
               val device: BluetoothDevice =
                       intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE)
               val deviceName = device.name
               val deviceHardwareAddress = device.address // MAC address
           }
       }
   }
}

override fun onDestroy() {
   super.onDestroy()
   ...

   // Don't forget to unregister the ACTION_FOUND receiver.
   unregisterReceiver(receiver)
}

자바

@Override
protected void onCreate(Bundle savedInstanceState) {
   ...

   // Register for broadcasts when a device is discovered.
   IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
   registerReceiver(receiver, filter);
}

// Create a BroadcastReceiver for ACTION_FOUND.
private final BroadcastReceiver receiver = new BroadcastReceiver() {
   public void onReceive(Context context, Intent intent) {
       String action = intent.getAction();
       if (BluetoothDevice.ACTION_FOUND.equals(action)) {
           // Discovery has found a device. Get the BluetoothDevice
           // object and its info from the Intent.
           BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
           String deviceName = device.getName();
           String deviceHardwareAddress = device.getAddress(); // MAC address
       }
   }
};

@Override
protected void onDestroy() {
   super.onDestroy();
   ...

   // Don't forget to unregister the ACTION_FOUND receiver.
   unregisterReceiver(receiver);
}

블루투스 기기와의 연결을 시작하려면 getAddress() BluetoothDevice: 연결된 MAC 주소를 검색합니다.

검색 기능 활성화

다른 기기에서 로컬 기기를 검색할 수 있도록 설정하려면 다음을 호출합니다. startActivityForResult(Intent, int) 드림 다음 코드로 교체합니다. ACTION_REQUEST_DISCOVERABLE 인텐트를 지정할 수 있습니다. 이 명령어는 다음 명령이 없어도 시스템의 검색 가능 모드를 사용 설정하도록 설정 앱으로 이동해야 하며 이 경우 앱이 중지됩니다. 작성자: 기본적으로 2분 동안 검색 가능 상태가 됩니다. 사용자는 최대 1시간까지 지정할 수 있는데, EXTRA_DISCOVERABLE_DURATION 드림 추가.

다음 코드 스니펫은 기기를 5분 동안 검색할 수 있도록 설정합니다.

Kotlin

val requestCode = 1;
val discoverableIntent: Intent = Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE).apply {
   putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300)
}
startActivityForResult(discoverableIntent, requestCode)

자바

int requestCode = 1;
Intent discoverableIntent =
       new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);
startActivityForResult(discoverableIntent, requestCode);

(
) 그림 2: 검색 가능 여부 사용 설정 대화상자

기기를 만들 수 있는 사용자 권한을 요청하는 대화상자가 표시됩니다. 검색 가능성을 높일 수 있습니다 사용자가 '허용'이라고 응답하면 그런 다음 지정된 시간 동안 기기가 검색 가능해집니다. 이후 내 활동 은 onActivityResult() 드림 기기가 대기하는 시간과 동일한 결과 코드를 갖는 콜백 있습니다. 사용자가 '거부'로 응답하거나 오류가 발생한 경우 결과 코드는 RESULT_CANCELED입니다.

기기는 할당된 시간 동안 자동으로 검색 가능한 모드로 유지됩니다. 예정 검색 가능 모드가 변경되었을 때 알림을 받으려면 BroadcastReceiver를 등록합니다. 대상 ACTION_SCAN_MODE_CHANGED 인텐트를 지정할 수 있습니다. 이 인텐트에는 추가 필드가 포함되어 있습니다. EXTRA_SCAN_MODE 드림 및 EXTRA_PREVIOUS_SCAN_MODE, 각각 새 스캔 모드와 이전 스캔 모드를 제공합니다. 각각에 가능한 값 extra는 다음과 같습니다.

SCAN_MODE_CONNECTABLE_DISCOVERABLE
기기가 검색 가능 모드입니다.
SCAN_MODE_CONNECTABLE
기기가 검색 가능 모드는 아니지만 연결을 수신할 수는 있습니다.
SCAN_MODE_NONE
기기가 검색 가능 모드가 아니므로 연결을 수신할 수 없습니다.

원격 기기에 연결을 시작하는 경우 기기 검색 기능을 사용 설정하세요. 검색 가능 여부는 다음과 같은 경우에만 사용 설정해야 합니다. 앱이 수신되는 서버 소켓을 다른 장치를 검색할 수 있어야 하기 때문에 다른 장치에 대한 연결을 시작합니다.