簡體   English   中英

可以在Cocoa / ObjC中“取消配對”藍牙設備嗎?

[英]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

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM