是否有可能“取消配对”蓝牙设备在可可/ ObjC?(Is it possible to “unpai

2019-08-17 01:55发布

我配对的IOBluetoothDevice在我的Mac /可可应用程序,并想“取消配对”它编程。 也就是说,我想从系统预置的蓝牙部分的左侧窗格中删除该设备。

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

这是可能通过可可?

在上面的图片,我想以编程方式从左侧窗格中删除“苹果的Mighty Mouse”。

Answer 1:

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

你可以找到在蓝牙偏好的文件/Library/Preferences ,它的名字是com.apple.Bluetooth.plist

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

注意访问API /修改系统首选项是相当低的水平。

编辑:如果在超级用户模式下运行下面的代码工作。 我不是一个Mac OS开发者自己,但它应该有可能与以初始化它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);


文章来源: Is it possible to “unpair” a Bluetooth device in Cocoa/ObjC?