이것이 얼마나 실용적인지 잘 모르겠지만 (CPU 사용률 등을 측정 할 기회가 없었습니다), 아래 AppleScript에서 작업을 수행합니다 [YOUR HEADPHONES' NAME]
. 헤드폰의 실제 이름으로 바꾸 십시오. 이것은 Apple 지원 커뮤니티 스레드 에서 수정 된 스크립트 버전입니다 .
아래 스크립트를 응용 프로그램으로 저장하고 실행 한 다음 시작 항목에 추가하십시오. 백그라운드에서 계속 실행되어야합니다.
repeat
set statusOld to checkStatus()
set statusNew to checkStatus()
repeat while statusOld is equal to statusNew
delay 5 --for 5 second checks
set statusNew to checkStatus()
end repeat
if statusNew is true then
tell application "System Preferences" to activate
tell application "System Preferences"
reveal anchor "input" of pane id "com.apple.preference.sound"
end tell
delay 0.5
tell application "System Events" to tell process "System Preferences"
tell table 1 of scroll area 1 of tab group 1 of window 1
select (row 1 where value of text field 1 is "Internal Microphone")
end tell
end tell
tell application "System Preferences" to quit
else
-- Nothing needs to happen, the device was removed
end if
end repeat
on checkStatus()
set bluetoothDeviceName to "[YOUR HEADPHONES' NAME]"
set myString to do shell script "system_profiler SPBluetoothDataType"
--initial check if it's not even there
if myString does not contain bluetoothDeviceName then
return false
else
--find out if connected/disconnected
set AppleScript's text item delimiters to "name:"
set myList to the text items of myString --each item of mylist is now one of the devices
set numberOfDevices to count of myList
set counter to 1
repeat numberOfDevices times --loop through each devices checking for Connected string
if item counter of myList contains bluetoothDeviceName then
if item counter of myList contains "Connected: Yes" then
return true
else if item counter of myList contains "Connected: No" then
return false
else
display dialog "Something went wrong with the script" --this shouldn't happen
end if
end if
set counter to counter + 1
end repeat
end if
end checkStatus
점검 간격 (주석이있는 행)으로 재생하여 for 5 second checks
자원 소비를 줄일 수 있습니다.
AVFoundation
macOS High Sierra 에는 여러 가지 새로운 API가 있으며 (특히 )이 문제에 대한보다 명확한 솔루션을 제공합니다. Swift 또는 Objective-C (또는 AppleScript 및 JXA의 Cocoa 스크립팅 브릿지)에 익숙하다면 High Sierra가 릴리스되면이 스크립트 대신 해당 API를 사용하는 것이 좋습니다. 특히, Apple의 오디오 세션 프로그래밍 안내서 및 이 스택 오버 플로우 게시물 은을 사용하여 Bluetooth 연결을 감지하는 몇 가지 기술을 보여줍니다 AVAudioSession
.