1

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

我之前的问题中,我发现了blueutil,但它使用私有 API。

4

2 回答 2

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 一样,是从 google 搜索和实验拼凑而成的。我本质上是一个纯粹的程序员,我相信真正理解你使用的技术。甚至我在 AppleScript 中拼凑一些东西,直到它们“工作起来”。

我希望有一个非常好的文件。当然还有语言指南,但这有点像从 ObjC 语言定义中学习 Cocoa。我目前的建议是开始 AppleScript,然后是AppleScript:权威指南。尤其是 Neuburg 不会粉饰语言或假装它是有道理的。Applescript,甚至比原来的 COBOL ( ADD X TO Y GIVING Z) 还要糟糕,因为它非常努力地试图变得简单,所以很难编写。我喜欢并尊重多种语言。AppleScript 是垃圾。

然而,它是与大多数 Mac 系统功能交互的最受支持的方式,因此优秀的 Mac 开发人员至少需要能够在其中度过难关。即使您通过 ObjC(或 MacRuby)使用新的 ScriptingBridge,底层对象模型仍然基于 AppleScript。根据我的经验,要让 ScriptingBridge 代码正常工作,您通常必须先用 AppleScript 编写它,然后再将其翻译成 Cocoa。

于 2011-12-06T15:57:34.650 回答
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>

注意:您需要在 Preferences > Security & Privacy 上授予对终端的访问权限

于 2020-12-24T13:08:25.017 回答