2013-02-19 14 views
8

Ho abbinato uno IOBluetoothDevice alla mia app Mac/Cocoa e vorrei "disaccoppiarlo" a livello di programmazione. Cioè, vorrei rimuovere il dispositivo dal riquadro sinistro della sezione Bluetooth delle Preferenze di Sistema.È possibile "disaccoppiare" un dispositivo Bluetooth in Cocoa/ObjC?

Ho visto [IOBluetoothDevice removeFromFavorites], ma questo rimuove solo l'icona del cuore accanto all'attributo "Preferito" del dispositivo - il dispositivo è ancora elencato nel riquadro di sinistra.

È possibile tramite Cocoa?

Bluetooth Section of System Preferences

Nella foto qui sopra, vorrei rimuovere programmazione "Apple Mighty Mouse" dal pannello di sinistra.

+0

vuoi rimuovere lo stesso in Mac o iOS ?? –

+0

@hussainShabbir I tag dovrebbero dirti questo! – Sulthan

risposta

9

I dispositivi associati sono una parte delle Preferenze di Sistema.

È possibile trovare il file con le preferenze Bluetooth in /Library/Preferences, il suo nome è com.apple.Bluetooth.plist.

com.apple.Bluetooth.plist

Tuttavia, non è possibile modificare direttamente il file. È necessario utilizzare la classe SCPreferences dal framework System Configuration.

Nota l'API di accesso/modifica preferenze di sistema è piuttosto basso livello.

EDIT: Il seguente codice funziona se eseguito in modalità superutente. Non sono uno sviluppatore Mac OS, ma dovrebbe essere possibile inizializzarlo con un AuthorizationRef ed eseguirlo con la modalità utente (l'utente confermerà l'accesso alla configurazione del sistema).

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); 
Problemi correlati