2016-02-19 30 views
5

Tôi cần thực hiện một ứng dụng có thể biết liệu tôi hiện có được kết nối với thiết bị Bluetooth cổ điển hay không (thực sự, nó sẽ là Bluetooth thiết bị xe hơi).Lấy danh sách các thiết bị kết nối bluetooth cổ điển (không có BLE) [EAAccessoryManager]

Bước đầu tiên của tôi là cho biết thiết bị Bluetooth cổ điển được kết nối hiện tại là gì. Tôi không thể sử dụng CoreBluetooth vì nó chỉ dành cho LE. Tôi cố gắng sử dụng khuôn khổ Phụ kiện bên ngoài.

Đây là mã (một nút bắt đầu phương pháp):

- (IBAction)startMethodGetConnected:(id)sender { 
    NSLog(@"button taped"); 
    // Get the number of accessories connected 
    NSUInteger NumberOfAccessoriesConnected = [[EAAccessoryManager sharedAccessoryManager].connectedAccessories count]; 
    //Display the number 
    NSLog(@"number of accessories connected : %d", NumberOfAccessoriesConnected); 
} 

Tôi đã cố gắng khi iPhone được kết nối với một bàn phím Bluetooth và cũng với một tai nghe Bluetooth. Trong cả hai trường hợp, bảng điều khiển hiển thị số đó là 0.

Làm cách nào để hiển thị số chính xác?

+0

Dường như các thiết bị Bluetooth như Bàn phím "bình thường" và Tai nghe "bình thường" không được liệt kê trong EAAcessoryManager. – Larme

+0

Có, tôi nghĩ rằng đó là vì thiết bị phải là MFI, có thể không phải là trường hợp đối với các thiết bị bluetooth "bình thường". Giải pháp mà tôi thấy là sử dụng [[AVAudioSession sharedInstance] availableInputs] để nhận đầu vào bluetooth, tuy nhiên, với giải pháp này, tôi không thể nhận được thông báo trong khi ở chế độ nền (tôi sẽ phải phát nhạc để được phép nhận thông báo). – augustin

Trả lời

1

Từ tài liệu táo:.

"Các ứng dụng hỗ trợ phụ kiện bên ngoài phải chắc chắn để cấu hình tập tin Info.plist của họ một cách chính xác Cụ thể, bạn phải bao gồm các UISupportedExternalAccessoryProtocols chìa khóa để khai báo các giao thức phần cứng cụ thể mà ứng dụng của bạn hỗ trợ. Để biết thêm thông tin về về khung này, hãy xem Lập trình phụ kiện bên ngoài Chủ đề ". here

Bạn cần thêm khóa này vào tệp Info.plist của bạn với giao thức của thiết bị MFi của bạn.

<key>UISupportedExternalAccessoryProtocols</key> 
<array> 
    <string>your_protocol_name</string> 
</array> 

Trân

1

Bạn không thể. Những gì bạn có thể làm là kiểm tra tuyến phát lại. Vấn đề là tai nghe xe hơi của bạn sẽ là tai nghe. Đây là mã tôi sử dụng trong ứng dụng của mình.

// create and set up the audio session 
AVAudioSession* audioSession = [AVAudioSession sharedInstance]; 
[audioSession setDelegate:self]; 
[audioSession setCategory: AVAudioSessionCategoryPlayAndRecord error: nil]; 
[audioSession setActive: YES error: nil]; 

// set up for bluetooth microphone input 
UInt32 allowBluetoothInput = 1; 
OSStatus stat = AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryEnableBluetoothInput, 
             sizeof (allowBluetoothInput), 
             &allowBluetoothInput 
             ); 
NSLog(@"status = %x", stat); // problem if this is not zero 

// check the audio route 
UInt32 size = sizeof(CFStringRef); 
CFStringRef route; 
OSStatus result = AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &size, &route); 
NSLog(@"route = %@", route); 
// if bluetooth headset connected, should be "HeadsetBT" 
// if not connected, will be "ReceiverAndMicrophone" 
Các vấn đề liên quan