É sempre divertido colocar seu Android ou Habilidades de programação Python na tela. Um tempo atrás, achei que seria legal tentar controlar meu laptop por meio do meu dispositivo móvel Android. Pense nisso: acesso remoto ao laptop, incluindo a capacidade de reproduzir e pausar música, iniciar e interromper a programação de trabalhos ou downloads, etc., tudo através do envio de mensagens de seu telefone. Legal, hein?
Antes de continuar lendo, lembre-se de que este é um projeto favorito, ainda em seus estágios iniciais - mas a plataforma básica está lá. Ao juntar algumas ferramentas convencionais, fui capaz de configurar meu telefone Android para controlar meu laptop por meio de um interpretador Python.
A propósito: o projeto é open source. Você pode verificar o código do cliente Aqui , e o código do servidor Aqui .
Este projeto envolve as seguintes tecnologias, algumas das quais você pode estar familiarizado, algumas das quais são bastante específicas para a tarefa em questão:
Em um alto nível, consideramos nosso telefone Android como o cliente e nosso laptop, o servidor. Abordarei essa arquitetura de acesso remoto em detalhes abaixo, mas o fluxo básico do projeto é o seguinte:
Agora, vamos nos aprofundar.
Então, um bom dia, comecei a procurar interpretadores Python que eu pudesse executar em meu telefone Android (Droid 2, naquela época). Logo depois descobri o excelente Pacote SL4A que deu vida ao Python For Android. É um pacote muito bacana: você clica em alguns botões e de repente você tem um quase ambiente Python totalmente funcional em seu dispositivo móvel ou tablet que pode executar o seu bom e velho código Python e acessar a API do Android (eu digo quase porque provavelmente algumas coisas estão faltando e a API do Android não está 100% acessível, mas para a maioria dos casos de uso, é suficiente).
Se preferir, você também pode construir sua própria distribuição Python para rodar em seu dispositivo Android, o que tem a vantagem de poder rodar qualquer versão do interpretador que desejar. O processo envolve compilação cruzada de Python para ser executado em BRAÇO (a arquitetura usada em dispositivos Android e outros tablets ) Não é fácil, mas certamente é possível. Se você está pronto para o desafio, verifique Aqui ou Aqui .
Depois de configurar o interpretador, você pode fazer basicamente o que quiser combinando o Python com a API do Android, incluindo controlar seu laptop remotamente. Por exemplo, você pode:
Nossa composição de projeto é a seguinte:
Um aplicativo do lado do cliente construído no Twisted se você quiser testar o código do servidor (abaixo) sem ter que executar o aplicativo Django.
Um aplicativo Django do lado do servidor, que lê comandos do dispositivo Android e os passa para o Twisted. Da forma como está, o Amarok é o único aplicativo de laptop com o qual o servidor pode interagir (ou seja, para controlar a música), mas isso é uma prova de conceito suficiente, já que a plataforma é facilmente extensível.
Uma 'instância' torcida do lado do servidor que se comunica com o reprodutor de mídia do laptop via D-Bus, enviando comandos conforme eles vêm do Django (atualmente, suporte 'próximo', 'anterior', 'reproduzir', 'pausa', 'parar' e 'mudo'). Por que não apenas passar os comandos diretamente do Django para o Amarok? Os atributos não bloqueadores e orientados por eventos do Twisted eliminam todo o trabalho árduo de threading (mais abaixo). Se você estiver interessado em se casar com os dois, veja Aqui .
Eu mencionei o D-Bus várias vezes, então provavelmente vale a pena discuti-lo com mais detalhes. De um modo geral, o D-Bus é um sistema de barramento de mensagens para a comunicação entre aplicativos (por exemplo, em um laptop e telefone Android) facilmente por meio de mensagens especialmente criadas.
É composto principalmente de dois ônibus: o barramento do sistema, para todo o sistema; e o barramento de sessão, para coisas do userland. As mensagens típicas para o barramento do sistema seriam “Ei, eu adicionei uma nova impressora, notifique meus aplicativos habilitados para D-Bus que uma nova impressora está online”, enquanto a comunicação entre processos (IPC) típica entre os aplicativos iria para a sessão ônibus.
Usamos o barramento de sessão para nos comunicarmos com o Amarok. É muito provável que a maioria dos aplicativos modernos (em ambientes Linux, pelo menos) suporte este tipo de mensagem e geralmente todos os comandos / funções que eles podem processar estão bem documentados. Como qualquer aplicativo com suporte D-Bus pode ser controlado sob esta arquitetura, as possibilidades são quase infinitas.
Mais informações podem ser encontradas Aqui .
Depois de configurar toda a infraestrutura, você pode disparar o Aplicativo Android e entrará em um loop infinito para ler as mensagens recebidas, processá-las com algumas verificações de sanidade e, se válido, enviá-las para uma URL predefinida (ou seja, a URL do seu aplicativo Django), que por sua vez processará a entrada e agir de acordo. O cliente Android então marca a mensagem como lida e o loop continua até que uma mensagem com o conteúdo exato “exitclient” (inteligente, hein?) Seja processada, caso em que o cliente sairá.
No servidor, o aplicativo Django pega um comando a ser processado e verifica se ele inicia com uma instrução válida. Nesse caso, ele se conecta ao servidor Twisted (usando Telnetlib para se conectar via telnet ) e envia o comando junto. Finalmente, o Twisted analisa a entrada, transforma-a em algo adequado para o Amarok e permite que o Amarok faça sua mágica! Finalmente, o seu laptop responde tocando músicas, pausando, pulando, etc.
Quanto ao “URL predefinido”: se pretende controlar o seu computador à distância, deverá ser um URL público (acessível através da Internet). Esteja ciente de que, atualmente, o código não implementa nenhuma camada de segurança (SSL, etc.) - tais melhorias são exercícios para o leitor, no momento.Tudo parece muito simples até agora, hein? Você pode estar se perguntando: “Isso pode ser estendido para suportar o recurso bacana [X]?” A resposta é: Sim (provavelmente)! Como você sabe como interagir com o computador usando o telefone de maneira adequada, pode complementar o código do servidor para fazer o que quiser. Antes que você perceba, você estará disparando processos demorados em seu computador remotamente. Ou, se você pode lidar com a eletrônica, você pode construir uma interface entre o seu computador e seu aparelho favorito, controlando este via instruções SMS (“Faça-me café!” vem à mente).
Vou continuar brincando com meu brinquedo de controle do laptop Android por um tempo, melhorando seus recursos, consertando bugs, etc. Mas se você estiver interessado, eu adoraria ver sua ajuda! Apenas bifurque o repositório e envie todas as solicitações pull.
Se você tiver alguma dúvida, envie-me um e-mail para [email protegido] e ficarei feliz em ajudar.