2013-02-19 66 views
8

Tôi đã ghép nối một IOBluetoothDevice trong ứng dụng Mac/Cocoa của mình và muốn "hủy ghép nối" chương trình theo cách lập trình. Tức là, tôi muốn xóa thiết bị khỏi ngăn bên trái của phần Bluetooth của Tùy chọn hệ thống.Có thể "bỏ ghép nối" thiết bị Bluetooth trong Cocoa/ObjC không?

Tôi đã xem [IOBluetoothDevice removeFromFavorites], nhưng điều đó chỉ xóa biểu tượng trái tim bên cạnh thuộc tính "Yêu thích" của thiết bị - thiết bị vẫn được liệt kê trong ngăn bên trái.

Điều này có thể thông qua Cocoa không?

Bluetooth Section of System Preferences

Trong hình ở trên, tôi muốn lập trình loại bỏ "Apple Mighty Mouse" từ khung bên trái.

+0

bạn có muốn xóa cùng trong ứng dụng mac hoặc ứng dụng ios không ?? –

+0

@hussainShabbir Các thẻ nên cho bạn biết điều đó! – Sulthan

Trả lời

9

Thiết bị được ghép nối là một phần của Tùy chọn hệ thống.

Bạn có thể tìm thấy tệp có tùy chọn bluetooth trong /Library/Preferences, tên của nó là com.apple.Bluetooth.plist.

com.apple.Bluetooth.plist

Tuy nhiên, bạn không thể chỉnh sửa tệp trực tiếp. Bạn nên sử dụng lớp SCPreferences từ khuôn khổ System Configuration.

Lưu ý rằng API để truy cập/sửa đổi tùy chọn hệ thống là khá thấp.

EDIT: Mã sau hoạt động nếu chạy ở chế độ siêu người dùng. Tôi không phải là một nhà phát triển Mac OS bản thân mình nhưng nó sẽ có thể init nó với một AuthorizationRef và chạy nó với chế độ người dùng (người dùng sẽ xác nhận quyền truy cập vào cấu hình hệ thống).

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); 
Các vấn đề liên quan