Desligue e ligue o Bluetooth de maneira programática
-
28-10-2019 - |
Pergunta
Existe uma maneira de ativar e desativar programaticamente a conexão Bluetooth no OSX de uma forma que seja aceita pela Mac App Store?
De meu anteriorpergunta , encontrei sobre blueutil , mas ele usa APIs privadas.
Solução
Seria um tanto surpreendente se a Apple aprovasse um aplicativo que modificasse as configurações de antena do usuário. Parece o tipo de coisa que eles normalmente desaprovam, não importa como você faça isso. Mas às vezes fico surpreso.
Você definitivamente pode fazer isso por meio do 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
Observe que isso assumirá as Preferências do sistema e, no final, fechá-lo-á mesmo que o usuário o estivesse executando. Essa não é a melhor experiência do usuário, e eu definitivamente não faria isso sem primeiro avisar o usuário. Mas é claro, eu não recomendaria modificar as configurações do bluetooth sem avisar o usuário.
Porque você perguntou, vou tirar um momento para reclamar aqui ...
Em relação a como aprender a ler e escrever o texto acima, primeiro observe que, como a maioria dos AppleScript que escrevo profissionalmente, foi remendado a partir de pesquisas e experimentações no Google. Sou um programador purista de coração e acredito em realmente entender a tecnologia que você usa. Até eu costuro coisas no AppleScript até que "meio que funcionem".
Gostaria que houvesse um documento realmente bom. Claro, há o guia de linguagem , mas é como aprender Cocoa com a definição da linguagem ObjC. Minhas recomendações atuais são Beginning AppleScript e, em seguida, AppleScript: The Definitive Guide . Neuburg, em particular, não adoça a linguagem nem finge que faz sentido. O Applescript, ainda pior que o COBOL (ADD X TO Y GIVING Z
) original, é muito difícil de escrever porque tenta muito ser fácil. Amo e respeito muitos idiomas. AppleScript é uma porcaria.
É, no entanto, a maneira mais suportada de interagir com a maioria das funções do sistema Mac, então um bom desenvolvedor de Mac precisa pelo menos ser capaz de se virar com isso. Mesmo se você usar o novo ScriptingBridge via ObjC (ou MacRuby), o modelo de objeto subjacente ainda é baseado em AppleScript. Na minha experiência, para fazer o código ScriptingBridge funcionar bem, geralmente é necessário escrevê-lo primeiro em AppleScript e depois traduzi-lo para Cocoa.