2012-03-19 46 views
5

Tôi đã xây dựng một ví dụ tối thiểu để phát hiện các thiết bị Bluetooth lân cận bằng cách sử dụng khung công tác riêng BluetoothManager trong iOS 5.0.Ví dụ BluetoothManManager tối thiểu

Sử dụng một câu trả lời được tìm thấy trong câu hỏi này: Finding generic Bluetooth devices within reach

Dưới đây là phương pháp viewDidLoad của tôi để đăng ký tham gia BluetoothAvailabilityChangedNotification. Tôi cũng đăng ký BluetoothDeviceDiscoveredNotification.

[[NSNotificationCenter defaultCenter] 
    addObserver:self 
    selector:@selector(bluetoothAvailabilityChanged:) 
    name:@"BluetoothAvailabilityChangedNotification" 
    object:nil]; 

btCont = [BluetoothManager sharedInstance]; 

[[NSNotificationCenter defaultCenter] 
    addObserver:self 
    selector:@selector(deviceDiscovered:) 
    name:@"BluetoothDeviceDiscoveredNotification" 
    object:nil]; 

Khi tôi nhận được thông báo thay đổi tính khả dụng của Bluetooth, tôi bật chức năng quét thiết bị, như được nêu trong một trong các câu trả lời trong liên kết nói trên.

- (void)bluetoothAvailabilityChanged:(NSNotification *)notification 
{ 
    NSLog(@"BT State: %d", [btCont enabled]); 
    [btCont setDeviceScanningEnabled:YES]; 
} 

Để hoàn chỉnh, đây là thiết bịPhương pháp thông báo được phát hiện.

- (void)deviceDiscovered:(NSNotification *) notification 
{ 
    NSLog(@"Discovered one!"); 
} 

Các bản ghi được sản xuất bằng cách chạy ứng dụng thử nghiệm như sau:

BTM: attaching to BTServer 
BTM: posting notification BluetoothAvailabilityChangedNotification 
BT State: 1 
BTM: setting device scanning enabled 

Đáng tiếc, điện thoại không được chọn lên bất kỳ thiết bị Bluetooth nào cả, mặc dù tôi biết có những thiết bị có thể phát hiện gần (được xác minh bằng thiết bị Android).

Một số điều tôi đã cố gắng đã:

  • Calling [btCont setPowered: YES]; và đăng ký tham gia thông báo thay đổi trạng thái năng lượng có liên quan, thực hiện setDeviceScanningEnabled: YES trong callback
  • Calling [btCont resetDeviceScanning] trước khi gọi setDeviceScanningEnabled
  • Gọi scanForConnectableDevices: (unsigned int) arg1; phương pháp, đoán rằng arg1 có thể là một loại giá trị thời gian chờ. Tôi đã thử một loạt các giá trị không thành công.

Bất kỳ suy nghĩ nào cũng sẽ được đánh giá cao. Cảm ơn!

+0

bất kỳ bản cập nhật? bạn có thể giải quyết vấn đề không? Bạn có bất kỳ thông tin nào về scanForConnectableDevicesmethod không? – Mahes

Trả lời

2

Theo như tôi biết, trình quản lý bluetooth nhận danh sách sau khi hệ điều hành đã lọc kết quả. Bạn sẽ chỉ nhận được các thiết bị tai nghe gần đó chứ không phải tất cả các thiết bị chung.

bạn phải sử dụng scanForServices:

// start scan 
    [btManager setDeviceScanningEnabled:YES]; 
    [btManager scanForServices:0xFFFFFFFF]; 
Các vấn đề liên quan