2013-02-19 3 views
8

내 Mac/Cocoa 앱에서 IOBluetoothDevice과 짝을 지어 프로그래밍 방식으로 "페어링 해제"하고 싶습니다. 즉, 시스템 환경 설정의 Bluetooth 섹션 왼쪽 창에서 장치를 제거하고 싶습니다.Cocoa/ObjC에서 블루투스 장치를 "페어링 해제"할 수 있습니까?

나는 [IOBluetoothDevice removeFromFavorites]을 보았지만 장치의 "즐겨 찾기"속성 옆에있는 하트 아이콘 만 제거합니다. 장치는 여전히 왼쪽 창에 나열됩니다.

코코아로 가능합니까? 위의 그림에서

Bluetooth Section of System Preferences

, 나는 프로그램의 왼쪽 창에서 "애플 마이티 마우스"를 제거하고 싶습니다.

+0

mac 또는 ios 앱에서 같은 것을 제거 하시겠습니까 ?? –

+0

@hussainShabbir 태그는이를 알려줍니다! – Sulthan

답변

9

페어링 된 장치는 시스템 환경 설정의 일부입니다.

블루투스 환경 설정이 /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); 
관련 문제