How to find whether a certain bluetooth device is connected?

半城伤御伤魂 提交于 2019-12-07 09:10:13

问题


I want to use applescript to do a periodic (every second) check to see if a specific bluetooth devices is connected, and if so, to flash up a quick notification. To frame it, I want a popup when my Airpods connect, since sometimes when I pull them out, the connect to my computer, and sometimes to my iPhone.

I've got everything figured out, except for the bluetooth check part. I've used this as a starting point, but can't get it to work. Any help would be appreciated.

repeat
set statusOld to checkStatus()
set statusNew to checkStatus()
repeat while statusOld is equal to statusNew
    delay 1 --for 1 second checks
    set statusNew to checkStatus()
end repeat
if statusNew is true then
    display dialog "Device Added - put some real code here"
else
    display dialog "Device Removed - put some real code here"
end if
end repeat

on checkStatus()

(*Delete the 2 lines below when done testing*)
--set myString to button returned of (display dialog "Connected?" buttons {"Yes", "No"})
--set myString to "name: DR-BT101 Connected: " & myString

(*uncomment line below when done testing*)
set myString to do shell script "system_profiler SPBluetoothDataTyp"

--initial check if it's not even there
if myString does not contain "Christian’s AirPods" 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 "Christian’s AirPods" 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 "Error Parsing" --this shouldn't happen
            end if
        end if
        set counter to counter + 1
    end repeat
end if
end checkStatus

回答1:


You're missing the e:

set myString to do shell script "system_profiler SPBluetoothDataType"
                                                                   ^



回答2:


I'm working on something similar. This seems to work well on macOS Mojave:

use framework "IOBluetooth"
use scripting additions -- https://stackoverflow.com/a/52806598/6962

on isDeviceConnected(substring)
    repeat with device in (current application's IOBluetoothDevice's pairedDevices() as list)
        if device's isConnected and (device's nameOrAddress as string) contains substring then return true
    end repeat

    return false
end isDeviceConnected

-- Usage example:
isDeviceConnected("AirPods")

I combined it with a launch agent like this: https://gist.github.com/henrik/3d4c622a5567cdf2bf461352f48ad4dd



来源:https://stackoverflow.com/questions/48327866/how-to-find-whether-a-certain-bluetooth-device-is-connected

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!