以编程方式关闭和打开蓝牙

时间:2011-12-06 15:30:58

标签: objective-c macos cocoa bluetooth mac-app-store

有没有办法以Mac App Store接受的方式以编程方式打开和关闭OSX上的蓝牙连接?

my previous question开始,我发现了blueutil,但它使用私有API。

2 个答案:

答案 0 :(得分:8)

如果Apple批准修改用户天线设置的应用程序,那会有点令人惊讶。无论你怎么做,这听起来都像是他们通常不喜欢的东西。但是,有时我会感到惊讶。

你绝对可以通过Applescript做到:

tell application "System Preferences"
    set current pane to pane "com.apple.preferences.Bluetooth"
    tell application "System Events"
        tell process "System Preferences"
            set isOnCheckbox to checkbox "On" of window "Bluetooth"
            if value of isOnCheckbox is 0 then
                click isOnCheckbox
            end if
        end tell
    end tell
    quit
end tell

请注意,这将接管系统偏好设置,并在最后关闭它,即使用户正在运行它。这不是最好的用户体验,如果没有先警告用户,我肯定不会这样做。但当然,我不建议在不警告用户的情况下修改蓝牙设置。


修改

因为你问过,我会花点时间在这里咆哮......

关于如何学习如何阅读和编写上述内容,首先请注意,它与我专业撰写的大多数AppleScript一样,是通过谷歌搜索和实验拼凑而成的。我是一个纯粹的程序员,我相信真正了解你使用的技术。即使我在AppleScript中拼凑一些东西,直到他们“有点工作。”

我希望有一份非常好的文件。当然有the language guide,但它有点像从ObjC语言定义中学习Cocoa。我目前的建议是Beginning AppleScript,然后是AppleScript: The Definitive Guide。特别是Neuburg并没有涂上这种语言或假装它是有道理的。 Applescript,甚至比原来的COBOL(ADD X TO Y GIVING Z)更糟糕,写起来非常困难,因为它很难轻松完成。我喜欢并尊重许多语言。 AppleScript是垃圾。

然而,它是与大多数Mac系统功能进行交互的最受支持的方式,因此一个优秀的Mac开发人员至少需要能够在其中获得。即使您通过ObjC(或MacRuby)使用new ScriptingBridge,基础对象模型仍然是基于AppleScript的。根据我的经验,要使ScriptingBridge代码运行良好,您通常必须先在AppleScript中编写它,然后将其转换为Cocoa。

答案 1 :(得分:0)

这在 10.15.6 中对我有用,我的解决方案可能过于复杂,它运行脚本 1(关闭蓝牙)然后运行脚本 2(打开蓝牙)。

脚本 1. 这是用于关闭蓝牙

tell application "System Events" to tell process "SystemUIServer"
    tell (menu bar item 1 of menu bar 1 where description is "bluetooth")
        click
        click menu item "Turn Bluetooth Off" of menu 1
    end tell
    tell window 1
        click button "Turn Bluetooth Off"
    end tell
end tell

脚本 2. 这是用于打开蓝牙

tell application "System Events" to tell process "SystemUIServer"
    tell (menu bar item 1 of menu bar 1 where description is "bluetooth")
        click
        click menu item "Turn Bluetooth On" of menu 1
    end tell
end tell

所以我执行一个命令,它会一个接一个地运行脚本,睡眠是为了让 UI 正确更新。

osascript bluetooth_off.scpt && sleep 3s && osascript bluetooth_on.scpt

您可以将命令保存在一个文件中并使用以下命令执行它:(它们必须在同一目录中)。

~ bash <fileName>

注意:您需要在“首选项”>“安全和隐私”上授予对终端的访问权限