[英]Is it possible to “unpair” a Bluetooth device in Cocoa/ObjC?
我在我的Mac / Cocoa應用程序中配對了一個IOBluetoothDevice
,並希望以編程方式“ IOBluetoothDevice
配對”它。 也就是說,我想從“系統偏好設置”的“藍牙”部分的左側窗格中刪除該設備。
我見過[IOBluetoothDevice removeFromFavorites]
,但只是刪除了設備“收藏夾”屬性旁邊的心臟圖標 - 設備仍然在左窗格中列出。
這可能通過Cocoa嗎?
在上圖中,我想以編程方式從左側窗格中刪除“Apple Mighty Mouse”。
配對設備是“系統偏好設置”的一部分。
您可以在/Library/Preferences
找到帶有藍牙首選項的文件,其名稱為com.apple.Bluetooth.plist
。
但是,您無法直接編輯該文件。 您應該使用System Configuration
框架中的SCPreferences
類。
請注意,用於訪問/修改系統首選項的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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.