2011-06-29 25 views
4

我們正在使用iOS的私人框架BluetoothManager一個簡單的實驗通用的藍牙設備 - 找伸手可及發現通用(非iOS版)BT設備。現在,只有下面的行返回的設備:尋找觸手可及

for(BluetoothDevice* device in [[BluetoothManager sharedInstance] pairedDevices])

遺憾的是它只返回設備已經配對,這是不太我們想要的。使用connectingDevices而不是pairedDevices根本不返回任何設備。那麼,我們有什麼選擇能夠檢測到任何可觸及的藍牙設備?我不認爲我可以使用GameKit,因爲我想發現非iOS設備。

歡迎任何建議。

+1

我應該澄清一下,我正在尋找一種方法來列出附近可發現的* generic *(非iOS)設備。 – Kar

回答

-2

而不是使用私有BluetoothManager框架,爲什麼不使用公開可用的遊戲套件框架,它提供了幾個方法來支持檢測&通過藍牙連接兩個設備以及它們之間的數據交換(,它不是限制在僅僅使用遊戲儘管它的名字

有一個非常全面的教程here

您可以使用內置的GKPeerPickerController,或者自己與以下

// create a session on each of your devices 
GKSession *session = [[GKSession alloc] initWithSessionID:@"uniqueSessionID" displayName:@"deviceDisplayName" sessionMode:GKSessionModePeer 
// set the delegate on the session 
session.delegate = self; 

管理它確保在所有設備上使用相同的會話ID,但要對設備唯一的名稱

然後執行以下的委託方法

- (void)session:(GKSession *)session peer:(NSString *)peerID didChangeState:(GKPeerConnectionState)state 

,並在新的同行宣傳日與相同的會話ID emselves,這將被調用,它們的狀態應該是

GKPeerStateAvailable 
+0

我認爲GKPeerPickerController不會返回可發現設備的列表,所以我不認爲沒有該列表可以找到附近的設備。 – Kar

+0

該列表由GKPeerPicketController顯示,並且它應該返回包含您的設備和您選擇的設備的GKSession。訪問整個列表而不是僅僅想要連接的列表最重要嗎? –

+0

看到我編輯的答案如何做到這一點,而不使用GKPeerPickerController –

-2

GKSession類,這是的GameKit框架的一部分,是你在找什麼,因爲它提供了發現並連接到附近的能力iOS設備使用藍牙。

+0

但我認爲GK不允許返回可到達的可發現設備列表。對? – Kar

+0

是的,你可以:GKSessionModeClient會話搜索本地設備通告相同的會話ID。當它發現可用和兼容的對等體時,它會調用委託的會話:peer:didChangeState:method。訣竅是使用GKSessionModeClient和GKSessionModeServer,並遠離GKSessionModePeer – werner

+0

我認爲如果可發現的設備是iOS設備,但不是通用設備,GKSession的工作原理是正確的? – Kar

3

我已經用了幾天的私人框架搞亂,並得到附近的設備列表是非常簡單的。

首先,你必須使用,使設備掃描:

[[BluetoothManager sharedInstance] setDeviceScanningEnabled:YES]; 

如果存在範圍內的設備將開始張貼BluetoothDeviceDiscoveredNotification通知,通知中心。訂閱這些,傳遞給回調的NSNotification中的對象將是BluetoothDevice *

我敢肯定,BluetoothManager賣場任何發現的設備的地方,但我只是把一切都變成我自己的NSMutableArray。

不幸的是我還沒有想出如何實際使用私有API的設備配對。

+0

那麼,這是否意味着爲了讓應用程序發現設備,它會*被囚禁? – Kar

+2

不,你只是不能將你的應用程序提交給商店,因爲蘋果不允許私人框架。開始使用框架的好帖子在這裏:http://stackoverflow.com/a/1892077/1088502 – Stoph

+0

從我的理解,$ 99開發計劃允許在開發手機上臨時構建。但是如果我將它分發給最終用戶,用戶的手機是否需要越獄? – Kar

3

您需要使用BluetoothManager打開藍牙功能,然後啓用藍牙掃描遠程設備。

註冊通知回調後,您將獲得發現的設備。通知對象實際上是一個指向BluetoothDevice對象的指針。

獲取BluetoothDevice對象指針,並從那裏獲取名稱,地址或連接到遠程設備。

這裏沒有RSSI,您可以通過查看BluetoothDevice.h文件來查看完整的方法列表。

我寫了一個完整的示例,與iOS 5.1,兼容這裏:http://www.pocketmagic.net/?p=2827

祝你好運!

+0

你有沒有更新過最近的iOS版本?從iOS 8左右開始,這似乎不再適用。 – Nate

+0

嗨NAte,不幸的是我最近沒有時間重新訪問。 – radhoo