2011-04-18 101 views
8

我遇到了一些CNCopyCurrentNetworkInfo返回的數據問題,並想知道我是否做錯了什麼。我正確使用CNCopyCurrentNetworkInfo嗎?

我用下面的代碼來顯示當前連接的接入點的BSSID:

NSArray* interfaces = (NSArray*) CNCopySupportedInterfaces(); 

for (NSString* interface in interfaces) { 

CFDictionaryRef networkDetails = CNCopyCurrentNetworkInfo((CFStringRef) interface); 
if (networkDetails) { 
    NSLog(@"all details: %@", (NSDictionary *)networkDetails); 
    NSLog(@"BSSID: %@", (NSString *)CFDictionaryGetValue (networkDetails, kCNNetworkInfoKeyBSSID)); 
    CFRelease(networkDetails); 
    } 
} 

通過審查,就好像CNCopyCurrentNetworkInfo掛到舊數據kCNNetworkInfoKeyBSSID但某些情況下會出現的NSLog語句。

我有兩個接入點設置,我試圖獲得當前連接的AP的BSSID。如果我只開啓一個AP,它將返回正確的BSSID。如果我關閉該AP,則無法獲得BSSID(正確),並且當我打開第二個AP並連接到它時,我會得到第二個AP的正確BSSID。

但是,如果我從啓動一個AP開始運行此代碼並正確給出該AP的BSSID。然後我打開第二個AP,然後關閉第一個AP(強制設備漫遊到第二個AP),日誌語句仍然返回第一個AP(我已經關閉並且不可能連接到)的BSSID。

有沒有人比我有更多的經驗呢?我的意思是手動清除CNCopyCurrentNetworkInfo在調用之間返回的值嗎?

我已經上都有了第四代iPod運行該觸摸運行iOS 4.3使用的Xcode內置4和iPhone 4運行iOS 4.1使用的Xcode 3.2.4

+0

我有同樣的問題,現在在iPhone 4和iOS 5.0.1。我不認爲你已經找到了解決方案。 – 2012-02-07 23:26:11

回答

4

我將提供一個答案建問題,因爲它似乎得到偶爾的投票,並可以解決方案。

簡短的版本是,這是你應該如何使用CNCopyCurrentNetworkInfo。這是iOS 4和5中的一個錯誤。如果您目前正在運行iOS 6測試版,我會建議調查它是否仍然以這種方式在那裏運行,並將其報告給Apple。

我很幸運,因爲我從事企業應用程序工作,並能夠使用對私有API的調用獲取此信息。有關如何做到這一點的信息,我可能會建議看看這裏:iphone-wireless on google code