これがどれほど実用的かはわかりませんが(CPU使用率などを測定する機会はありませんでした)、以下のAppleScriptが仕事[YOUR HEADPHONES' NAME]
をします。ヘッドフォンの実際の名前に置き換えてください。これは、Apple Support Communitiesスレッドからのスクリプトの修正バージョンです。
以下のスクリプトをアプリケーションとして保存し、実行し、スタートアップアイテムに追加します。バックグラウンドで継続的に実行する必要があります。
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
。