ฉันไม่แน่ใจว่าวิธีนี้ใช้ได้จริงหรือเปล่า (ฉันไม่ได้มีโอกาสวัดการใช้งาน CPU ฯลฯ ) แต่ AppleScript ด้านล่างจะทำงานได้ - เพียงแทนที่[YOUR HEADPHONES' NAME]
ด้วยชื่อจริงของหูฟังของคุณ นี้เป็นรุ่นที่ปรับเปลี่ยนสคริปต์จากด้ายชุมชนแอปเปิ้ลสนับสนุน
บันทึกสคริปต์ด้านล่างเป็นแอปพลิเคชันเรียกใช้และเพิ่มลงในรายการเริ่มต้นของคุณซึ่งควรทำงานอย่างต่อเนื่องในพื้นหลัง
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
) เพื่อลดการใช้ทรัพยากร
มี API ใหม่จำนวนมาก (โดยเฉพาะอย่างยิ่งในAVFoundation
) มาถึง macOS High Sierra ที่จะช่วยให้การแก้ปัญหาที่สะอาดมากขึ้นสำหรับปัญหานี้ หากคุณพอใจกับ Swift หรือ Objective-C (หรือสะพานเขียนสคริปต์ Cocoa ใน AppleScript และ JXA) ฉันจะพิจารณาใช้ API เหล่านั้นแทนสคริปต์นี้เมื่อมีการเปิดตัว High Sierra โดยเฉพาะอย่างยิ่งแอปเปิ้ลเซสชันเสียง Programming คู่มือและโพสต์กองมากเกินแสดงเทคนิคของการตรวจสอบการเชื่อมต่อบลูทู ธ AVAudioSession
ใช้บางส่วน