10

我已经IOBluetoothDevice在我的 Mac/Cocoa 应用程序中配对了一个,并且想以编程方式“取消配对”它。也就是说,我想从系统偏好设置的蓝牙部分的左窗格中删除该设备。

我见过[IOBluetoothDevice removeFromFavorites],但这只是删除了设备“收藏夹”属性旁边的心形图标——该设备仍列在左窗格中。

这可以通过 Cocoa 实现吗?

系统偏好设置的蓝牙部分

在上图中,我想以编程方式从左窗格中删除“Apple Mighty Mouse”。

4

1 回答 1

10

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

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

com.apple.Bluetooth.plist

但是,您不能直接编辑该文件。您应该使用框架中的SCPreferences类。System Configuration

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

编辑:如果在超级用户模式下运行,则以下代码有效。我自己不是 Mac OS 开发人员,但应该可以使用 an 初始化它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);
于 2013-12-23T18:56:15.633 回答