2017-12-13 18 views
0

CBCentralManager을 사용하여 블루투스 장치를 검색하고 연결하려고합니다. 이 장치는 헤드셋입니다. 그것은 전화로 블루투스 스캔을 통해 발견 할 수 있습니다. 장치 이름은 "A1-25"입니다. "A1-25"를 전화 블루투스 설정에서 직접 연결하면 노래를 재생할 수 있습니다. 정상적으로 작동합니다. 내가 CBCentralManager를 사용하여 스캔 주변을 시작iOS 핵심 블루투스 - 검색에서 실제 장치를 찾을 수 없습니다.

그러나

enter image description here

. "A1-25"라는 주변 장치를 볼 수 없습니다. 하지만 오히려, "EQ_Test_llyan"이라는 주변 장치를 보았습니다. 그러나 전에 블루투스 설정에서 주변 기기를 검색 할 때 "EQ_Test_llyan"이 표시되지 않았습니다.

주변 "EQ_Test_llyan"
2017-12-13 16:35:07.233021+0800 Test[1405:500801] started scanning 
2017-12-13 16:35:17.469375+0800 Test[1405:500801] discovered peripheral with name EQ_Test_llyan advertisementData:{ 
    kCBAdvDataIsConnectable = 1; 
    kCBAdvDataLocalName = "EQ_Test_llyan"; 
    kCBAdvDataManufacturerData = <b0024551 5f544553 54>; 
} 
2017-12-13 16:35:17.470672+0800 Test[1405:500801] connecting with device!!!!!!! 
2017-12-13 16:35:17.654884+0800 Test[1405:500801] connected to peripheral name:EQ_Test_llyan id:7326E741-BF68-D9E8-D7A6-5F27227685A7 
2017-12-13 16:35:17.656526+0800 Test[1405:500801] discovering services for peripheral name:EQ_Test_llyan 
2017-12-13 16:35:18.193311+0800 Test[1405:500801] discovered services:(
) for peripheral name:EQ_Test_llyan 

에는 서비스 (로그 상기 참조)가없는, 그래서 그와 통신 할 수있다. 지금, 내가 전화 설정에서 블루투스 장치로 돌아 갔을 때 나는 이제 "EQ_Test_llyan"에 연결되었지만 "A1-25"에는 연결되어 있지 않습니다. 이제 음악을 연주하려고하는데 소리가 헤드셋에서 나오지 않습니다.

enter image description here

나는 헤드셋을 해제

, 나는 "A1-25"이 사라질 것 "EQ_Test_llyan"과의 연결이 끊어집니다. 그러므로 나는 "EQ_Test_llyan"과 "A1-25"가 같은 장치에서 온다고 결론을 내린다.

동시에 둘 모두에 연결할 수 있습니다. 프로그래밍 방식으로 "EQ_Test_llyan"에 연결하면 설정에 나타납니다. 그런 다음 수동으로 "A1-25"에 전화 설정에서 연결합니다. 그것은 아래 사진에서 보여주는 것과 같을 것입니다. 음악을 재생할 때 헤드셋에서 소리가 나올 수 있습니다. 그래서, "A1-25"에 연결되어 있지만 "EQ_Test_llyan"에만 연결되어있는 한 정상적으로 작동합니다.

enter image description here

그래서 제 질문은 다음과 같습니다

  1. 가 CBPeripheral가 실제 장치를 참조인가? 그렇다면 "A1-25"를 스캔 할 수 없지만 "EQ_Test_llyan"을 스캔 할 수 있습니까?
  2. 전화가 "A1-25"에 연결되어 있고 그 옆에 "i"가 인 경우 연결이 종료 될 수 있음을 유의하십시오. 하지만 전화가 "EQ_Test_llyan"에 연결되어있을 때는 "i"가 이 아닙니다. 따라서 사용자가 기기를 끄지 않으면 연결을 해제 할 수 없습니다. 그래서, 둘의 차이점은 무엇입니까? "AI-25"는 실제 장치입니까? "EQ_Test_llyan"은 연결에 불과합니까? 나는 을 이해하지 못한다.

답변

1

앞서 언급 한 것처럼 헤드셋이기 때문에 CBCentralManager에서 "A1-25"를 찾을 수 없습니다. 헤드셋은 "Bluetooth Classic"프로파일로 알려진 헤드셋 프로파일 (HSP)을 사용하고 코어 블루투스는 Bluetooth 저에너지 (BLE, Bluetooth 4.0) 일반 속성 프로파일 (GATT)에만 적합합니다. CoreBluetooth API를 살펴보면 서비스와 특성에 대한 모든 것을 알게됩니다. 사운드 관련 프로파일에 대한 추상화가 없습니다.

반면에 GATT는 매우 일반적이며 추상적 인 프로필이며 속도, 온도, 심박수, 일부 장치 구성 및 거의 모든 특정 데이터에 대해 매번 모든 종류의 장치에서 사용할 수 있습니다. 다른 값. 따라서 정확한 장치를 인식하는 앱에서만 GATT 기기와 페어링 할 수 있습니다.전화 설정 화면에서 일반 서비스와 아무런 관련이 없습니다.

+0

안녕하세요, 답변 해 주셔서 감사합니다. 그렇다면 블루투스 헤드셋의 마이크에서 소리를 가져 와서 앱에서 재생할 수 있습니까? 내 말은, BLE GATT 프로파일의 사운드 관련 프로파일이 없다고하셨습니까? 그렇다면 BLE로 실시간 사운드 데이터를 전달할 수 없다는 뜻입니까? –

+0

BLE 연결을 통해 실시간 사운드를 전달할 수 없으며, 부적절한 API가 있으며 소리를 전송할 속도가 너무 느립니다. 헤드셋을 사용하여 앱에서 소리를 재생하고 녹음 할 수 있습니다. 휴대 전화 설정 화면에서 헤드셋 (A1-25)을 페어링합니다. 그런 다음 내부 마이크 및 스피커가 아닌 헤드셋을 사용하도록 앱에서 오디오 세션을 구성해야합니다. – fedulvtubudul

+0

이해해 주셔서 감사합니다. –