我已经IOBluetoothDevice
在我的 Mac/Cocoa 应用程序中配对了一个,并且想以编程方式“取消配对”它。也就是说,我想从系统偏好设置的蓝牙部分的左窗格中删除该设备。
我见过[IOBluetoothDevice removeFromFavorites]
,但这只是删除了设备“收藏夹”属性旁边的心形图标——该设备仍列在左窗格中。
这可以通过 Cocoa 实现吗?
在上图中,我想以编程方式从左窗格中删除“Apple Mighty Mouse”。
我已经IOBluetoothDevice
在我的 Mac/Cocoa 应用程序中配对了一个,并且想以编程方式“取消配对”它。也就是说,我想从系统偏好设置的蓝牙部分的左窗格中删除该设备。
我见过[IOBluetoothDevice removeFromFavorites]
,但这只是删除了设备“收藏夹”属性旁边的心形图标——该设备仍列在左窗格中。
这可以通过 Cocoa 实现吗?
在上图中,我想以编程方式从左窗格中删除“Apple Mighty Mouse”。
配对设备是系统偏好设置的一部分。
您可以在 中找到带有蓝牙首选项的文件/Library/Preferences
,其名称为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);