可以在Cocoa/ObjC中"取消配对"蓝牙设备吗?

For*_*ord 8 cocoa bluetooth objective-c iobluetooth

我已经IOBluetoothDevice在我的Mac/Cocoa应用程序中配对,并希望以编程方式"取消配对".也就是说,我想从"系统偏好设置"的"蓝牙"部分的左侧窗格中删除该设备.

我已经看过了[IOBluetoothDevice removeFromFavorites],但是只删除了设备"收藏夹"属性旁边的心脏图标 - 设备仍然列在左侧窗格中.

这可能通过Cocoa吗?

系统偏好设置的蓝牙部分

在上图中,我想以编程方式从左侧窗格中删除"Apple Mighty Mouse".

Sul*_*han 10

配对设备是"系统偏好设置"的一部分.

您可以在其中找到具有蓝牙首选项的文件/Library/Preferences,其名称为com.apple.Bluetooth.plist.

com.apple.Bluetooth.plist

但是,您无法直接编辑该文件.你应该使用框架中的SCPreferencesSystem Configuration.

请注意,用于访问/修改系统首选项的API非常低级别.

编辑:如果在超级用户模式下运行,以下代码可以正常工作.我自己不是Mac OS开发人员,但应该可以使用a来启动它AuthorizationRef并使用用户模式运行它(用户将确认访问系统配置).

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);
Run Code Online (Sandbox Code Playgroud)