2016-12-16 9 views
0

내가 개발 한 Android 앱을 번역하려고하는데, 주변에있는 모든 주변 기기를 찾아서 사용자에게 반환합니다. 그런 다음 사용자는 그 중 하나 이상에 연결하여 다른 일을 할 수 있습니다.CoreBluetooth를 사용하여 중앙의 모든 BLE 주변 장치를 찾는 방법은 무엇입니까?

문제점 : 장치가 CoreBluetooth와 연결되면 더 이상 스캔 중에 반환되지 않습니다. 반환 된 장치 부근에 대한 정보를 제공하지 않는 알려진 장치 목록을 통해 다시 취득해야합니다.

알고있는 각 장치에 연결하여 범위 내에 있는지보다 간단한 방법이 있습니까?

편집 : 알려진 장치가 실제로 내가 장치에 대한 첫 번째 연결 한 후 다시 검색 할 때 저를 혼동 동일한 광고 이름과 GAPP 이름이 없었 BLE 장치에서 일하고, 스캔시에 반환됩니다 :)

+0

, 당신이 할 수있는 후 통보 해. 너 그거 쓸 수 없어? – ladislas

답변

0

광고가 보이면 기기가 범위 내에 있음을 알 수 있습니다. 의

  • 연결 가능한
  • 비 접속
  • 연결 가능한 감독
  • 비 접속 가능한 방향 (주연 연결할 기꺼이 장치의 화이트리스트) (화이트리스트 :

    광고의 여러 가지 형태의 이 주변 장치가 광고 할 때 볼 수있는 장치 (연결할 수없는 경우에도)

일부 장치는 연결할 때 제공하는 서비스의 하위 집합 만 보급합니다. 그 이유는 보낼 수있는 광고 데이터가 31 바이트 뿐이므로 Bluetooth 표준 서비스를 사용하는 경우 각 서비스 당 2 바이트가됩니다. 맞춤 서비스를 사용하는 경우 해당 서비스를 광고하기 위해 16 바이트가 필요합니다.

또한 서비스 목록을 광고 할 수 있으므로 연결할 대상을 알 수 있습니다.

즉, 반환 된 광고 데이터를 구문 분석해야합니다. 이 작업은 this Stack Overflow question의 범위 내에 있습니다. 응용 프로그램을 시작할 때

0

나는

스위프트 3이 사용

func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) { 
    let perip = peripheral.identifier.uuidString 

    if !perip.isEmpty { 

     if peripheral == myPeriperal { 


      print("myPeriperal Ok") 
     } 


    }else{ 
     print("no ble") 

    } 

} 

하고 연결하지만 때문에 범위의 연결을 분실 한 경우

func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) { 


    centralManager.connect(myPeriperal, options: nil) 

} 
+0

예를 들어 앱을 시작할 때 알려진 장치가 범위 내에 있는지 어떻게 알 수 있습니까? – Louis

+0

@Slowbro 제 편집을보세요. 제 애플 리케이션에서 사용하고 잘 작동합니다. – Rob