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

Objective c 以编程方式关闭和打开蓝牙,objective-c,macos,cocoa,bluetooth,mac-app-store,Objective C,Macos,Cocoa,Bluetooth,Mac App Store,是否有一种方式可以通过编程方式在OSX上打开和关闭蓝牙连接,并且Mac App Store会接受这种方式 从中,我发现了大约,但它使用的是私人API。如果苹果批准了一个修改用户天线设置的应用程序,那就有点令人惊讶了。不管你怎么做,这听起来像是他们通常不喜欢的事情。但是,有时我会感到惊讶 您完全可以通过Applescript完成此操作: tell application "System Preferences" set current pane to pane "com.apple.pre

是否有一种方式可以通过编程方式在OSX上打开和关闭蓝牙连接,并且Mac App Store会接受这种方式


从中,我发现了大约,但它使用的是私人API。

如果苹果批准了一个修改用户天线设置的应用程序,那就有点令人惊讶了。不管你怎么做,这听起来像是他们通常不喜欢的事情。但是,有时我会感到惊讶

您完全可以通过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中拼凑一些东西,直到它们“工作正常”

我希望有一份真正好的文件。当然有,但这有点像从ObjC语言定义中学习Cocoa。我目前的建议是,然后。尤其是纽伯格,他没有粉饰这种语言,也没有假装它有道理。Applescript甚至比最初的COBOL更糟糕(
将X添加到Y,给出Z
),编写起来非常困难,因为它试图变得简单。我喜欢并尊重许多语言。AppleScript是垃圾


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

如果苹果批准了一款修改用户天线设置的应用程序,那就有点奇怪了。不管你怎么做,这听起来像是他们通常不喜欢的事情。但是,有时我会感到惊讶

您完全可以通过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中拼凑一些东西,直到它们“工作正常”

我希望有一份真正好的文件。当然有,但这有点像从ObjC语言定义中学习Cocoa。我目前的建议是,然后。尤其是纽伯格,他没有粉饰这种语言,也没有假装它有道理。Applescript甚至比最初的COBOL更糟糕(
将X添加到Y,给出Z
),编写起来非常困难,因为它试图变得简单。我喜欢并尊重许多语言。AppleScript是垃圾


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

这在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

注意:您需要在“首选项”>“安全和隐私”上授予对终端的访问权限。这在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

注意:您需要在“首选项”>“安全与隐私”1上授予对终端的访问权限,这当然不是一种优雅的方式,但如果您想在Mac AppStore上发布应用程序,这可能是您唯一的选择。@Rob我需要此脚本的版本稍有不同,例如设置声音窗格的“静音”复选框。您能否详细说明“告知流程”系统首选项“部分?这是什么意思?有“程序员用Applescript”指南吗?这一定是有史以来最可怕的语法了……奇怪的是,负责Applescript的人似乎并不忽视编程和语言设计:这只会让整个事情变得不可原谅。谢谢链接。这很有教育意义。阅读第9节,特别是其中注明“AppleScr