2013-02-19 18 views
8

Mam sparowany IOBluetoothDevice w mojej aplikacji Mac/Cocoa i chciałbym "sparować" to programowo. To znaczy, chciałbym usunąć urządzenie z lewego panelu sekcji Bluetooth w Preferencjach systemowych.Czy można "sparować" urządzenie Bluetooth w Cocoa/ObjC?

Widziałem [IOBluetoothDevice removeFromFavorites], ale to po prostu usuwa ikonę serca obok atrybutu "Ulubione" urządzenia - urządzenie jest nadal wymienione w lewym okienku.

Czy to możliwe dzięki kakao?

Bluetooth Section of System Preferences

Na powyższym zdjęciu, chciałbym programowo usunąć "Apple Mighty Mouse" z lewego panelu.

+0

Czy chcesz usunąć to samo w aplikacji mac lub ios? –

+0

@hussainShabbir Tagi powinny Ci to powiedzieć! – Sulthan

Odpowiedz

9

Sparowane urządzenia są częścią Preferencji systemowych.

Możesz znaleźć plik z preferencjami bluetooth w /Library/Preferences, jego nazwa to com.apple.Bluetooth.plist.

com.apple.Bluetooth.plist

Jednak nie można edytować plik bezpośrednio. Powinieneś użyć klasy SCPreferences ze struktury .

Uwaga: interfejs API do uzyskiwania dostępu/modyfikowania preferencji systemowych jest dość niski.

EDYCJA: Poniższy kod działa, jeśli jest uruchomiony w trybie administratora. Nie jestem programistą systemu Mac OS, ale powinno być możliwe zainicjowanie go za pomocą AuthorizationRef i uruchomienie go w trybie użytkownika (użytkownik potwierdzi dostęp do konfiguracji systemu).

SCPreferencesRef prefs = SCPreferencesCreate(kCFAllocatorDefault, 
              CFSTR("Test"), 
              CFSTR("/Library/Preferences/com.apple.Bluetooth.plist")); 

const CFStringRef PAIRED_DEVICES_KEY = CFSTR("PairedDevices"); 

NSArray *pairedDevices = (__bridge NSArray *) SCPreferencesGetValue(prefs, PAIRED_DEVICES_KEY); 

NSLog(@"Paired devices: %@", pairedDevices); 

NSString *deviceToRemove = @"e4-32-cb-da-ca-2f";   

NSMutableArray *newPairedDevices = [pairedDevices mutableCopy]; 
[newPairedDevices removeObject:deviceToRemove]; 

Boolean valueSet = SCPreferencesSetValue(prefs, PAIRED_DEVICES_KEY, (__bridge CFPropertyListRef) [NSArray arrayWithArray:newPairedDevices]); 

NSLog(@"Value set: %@", (valueSet) ? @"YES" : @"NO"); 

if (!valueSet) { 
    NSLog(@"Error: %@", SCCopyLastError()); 
} 

Boolean saved = SCPreferencesCommitChanges(prefs); 

if (!saved) { 
    NSLog(@"Error: %@", SCCopyLastError()); 
} 

NSLog(@"Saved: %@", (saved) ? @"YES" : @"NO"); 

CFRelease(prefs); 
Powiązane problemy