Sto cercando un modo per presentare WiFi disponibili in un'app per iPhone. Finora la mia ricerca ha portato ai seguenti:Elenco/Ricerca per WiFis disponibile per iPhone
- applicazioni che implementano (ndr) un tale funzionalità sono stati rimossi da AppStore (significa che non è possibile distribuire l'applicazione tramite AppStore che va bene per me)
- Apple nasconde la funzionalità necessaria per una scansione in un framework privato e non è possibile trovare spiegazioni/commenti/esempi su "come utilizzare"
- http://code.google.com/p/iphone-wireless sembra essere molto promettente. comunque, non riesco a capire come includere le fonti consegnate nel mio codice in modo che funzioni su un dispositivo
Anche gli adattamenti menzionati htt: //code.google.com/p/iphone- wireless/issues/detail? id = 26 non mi ha ottenuto i risultati desiderati. Il progresso è stato più finire con un messaggio
dlopen error: dlopen(/System/Library/SystemConfiguration/Aeropuerto.bundle/Aeropuerto, 1): image not found failed: __Apple80211Associate
dopo aver lanciato l'applicazione su un dispositivo (iPhone 3GS; iOS 3.1.3).
codice sorgente utilizzato che procudes l'errore è qui:
NSMutableDictionary *networks;
bool scanning;
void *libHandle;
void *airportHandle;
int (*open)(void *);
int (*bind)(void *, NSString *);
int (*close)(void *);
int (*scan)(void *, NSArray **, void *);
networks = [[NSMutableDictionary alloc] init];
// libHandle = dlopen("/System/Library/Frameworks/Preferences.framework/Preferences", RTLD_LAZY);
// libHandle = dlopen("/System/Library/PrivateFrameworks/Apple80211.framework/Preferences", RTLD_LAZY);
libHandle = dlopen("/System/Library/SystemConfiguration/WiFiManager.bundle/WiFiManager", RTLD_LAZY);
open = dlsym(libHandle, "Apple80211Open");
bind = dlsym(libHandle, "Apple80211BindToInterface");
close = dlsym(libHandle, "Apple80211Close");
scan = dlsym(libHandle, "Apple80211Scan");
open(&airportHandle);
bind(airportHandle, @"en0");
NSLog(@"Scanning...");
scanning = true;
NSArray *scan_networks;
NSDictionary *parameters = [[NSDictionary alloc] init];
scan(airportHandle, &scan_networks, parameters);
bool changed;
for (int i = 0; i < [scan_networks count]; i++) {
if([networks objectForKey:[[scan_networks objectAtIndex: i] objectForKey:@"BSSID"]] != nil
&& ![[networks objectForKey:[[scan_networks objectAtIndex: i] objectForKey:@"BSSID"]] isEqualToDictionary:[scan_networks objectAtIndex: i]])
changed = true;
[networks setObject:[scan_networks objectAtIndex: i] forKey:[[scan_networks objectAtIndex: i] objectForKey:@"BSSID"]];
}
if(changed) {
NSLog(@"NetworksUpdated");
}
scanning = false;
NSLog(@"Scan Finished...");
NSLog(@"Found %i networks: %@", [networks count], networks);
Anche se provare una delle altre righe di commento, ma non funziona: programma ha ricevuto EXC_BAD_ACCESS e molti
warning: check_safe_call: could not restore current frame
warning: Unable to restore previously selected frame.
Quello che sto cercando sono suggerimenti su come includere iphone-wireless nel mio progetto e su come modificare il codice dato? Un'alternativa sarebbe un suggerimento su come cercare WiFis nel proprio ambiente.
Sarebbe bello se qualcuno potesse aiutare.
appena provato: sebbene il codice mi avvisi durante il runtime; stampa WiFis trovato. Ci deve essere un approccio migliore di questo buggy? Sarebbe bello almeno aprire e chiudere correttamente l'accesso all'hardware WiFi (che non sembra funzionare con il codice precedente) 0o –