1.0.1 • Published 2 years ago

maggio-termux-api v1.0.1

Weekly downloads
-
License
ISC
Repository
github
Last release
2 years ago

maggio-termux-api

Uma api simples para controlar seu celular

Conteúdos


Para que isso serve?

Eu construi essa API a partir de algumas funcionalidades do Termux e Termux Api. Eu uso um child_process/exec para executar instruções no terminal do Termux e retornar uma resposta. A seguir uma lista de funcionalidades dessa API:

  • status da bateria
  • histórico de chamadas
  • info das câmeras
  • tirar fotos
  • obter texto da área de transferência
  • injetar texto na área de transferência
  • lista de contatos
  • caixas de diálogo
  • fazer download de arquivos
  • usar sensor de digital
  • obter localização
  • reprodutor de mídia
  • gravar áudio
  • notificações
  • histórico de SMS
  • enviar SMS
  • histórico de chamadas
  • realizar chamadas
  • controlar lanterna
  • info TTS engines
  • Falar através da TTS engine
  • vibração
  • info de conexão wifi
  • habilitar/desabilitar wifi

Você pode construir uma API com funcionalidades bem interessantes com isso, ou aprimorar e usar como ferramenta de desenvolvimento. Cabe a sua criatividade.


Breve introdução ao Termux

O Termux é um emulador de terminal linux para Android, extremamente útil para desenvolvedores ou para aprendizado. Com ele você pode executar comandos linux, rodar scripts ou até mesmo ter acesso a funcionalidades do Android. Inclusive você pode utiliza-lo como ambiente de desenvolvimento NodeJS, se desejar. Para começar a usar o Termux de forma correta, você precisará seguir os passos abaixo:

  • Instale a loja de aplicativos F-Droid
  • Abra o F-Droid e instale dois aplicativos: Termux e Termux-Api.
  • Após instalar ambos, clique sobre o ícone do Termux-Api > informação do aplicativo > permissões e habilite todas as permissões. (Isso será necessário caso queira usar a API)

Agora abra o Termux e execute os seguintes comandos (um comando de cada vez, dê enter para confirmar) (aviso importante: pelo menos no meu dispositivo, o Termux acaba gerando muitos erros de permissão, principalmente synlink e ao tentar instalar dependências com NPM, então eu recomendo que realize o tutorial como mostrado abaixo, e crie uma pasta fora do armazenamento primário, na raiz, para não haver problemas de permissão mais tarde.)

termux-setup-storage
pkg update && pkg upgrade
am start -a android.intent.action.VIEW -d "content://com.android.externalstorage.documents/root/primary"
pkg install vim
pkg install termux-api
pkg install nodejs
mkdir dev
cd dev
npm init -y
npm i --save termux-phone-api

Lembrando que, se abrir alguma janela ou pedir permissão, apenas confirme e continue. Se você quiser aprender mais sobre Termux, comandos internos, Usar GitHub e etc, acesse esse repositório Eu recomendo a IDE Acode para editar seus códigos. Simplesmente abra-o, clique nos três pontinhos no canto superior direito, > arquivos > adicionar (botão "+") > adicionar caminho > selecionar pasta > selecione a pasta Termux/dev que criamos logo acima. Agora você poderá utilizar a IDE aqui.


Ouvindo eventos bateria e wifi

Caso você tenha interesse em trabalhar com eventos, desenvolvi uma aplicação simples, onde toda vez que a bateria muda, ou a conexão wifi se altera, um evento é disparado e você pode manipulá-lo para fazer algo.

const {
	em,
	startServer
} = require ("termux-phone-api");

em.on("start", () => {
	console.log("Aplicação online!")
})

em.on("battery", (data) => {
	console.log("Houve uma alteração na sua bateria!")
	console.log(data)
})

em.on("wifi", (data) => {
	console.log("Houve uma alteração na sua conexão!")
	console.log(data)
})

startServer()

A maneira mais fácil de testar o script acima, é ligando/desligando o wi-fi e conectando/desconectando o carregador. Vale mencionar que o código verifica alterações a cada 5 segundos, então pode levar algum tempo até receber o log.


executando ações

Você pode executar diversas ações, como por exemplo ligar/desligar a lanterna, tirar uma foto ou até mesmo obter localização.

const {
	Termux
} = require("termux-phone-api");
const termux = new Termux()

async function run() {
	try {

		console.log("loading examples...")

		// obtenha histórico de chamada
		let callLogs = await termux.callLog();
		console.log("call logs\n", callLogs)

	} catch(err) {
		console.log(err.stack)
	}
}
run()

Abaixo alguns exemplos de como chamar determinadas funções

// obtenha info das câmeras
let camInfo = await termux.cameraInfo()
console.log(camInfo)
// tire uma foto
await termux.takePhoto({
	camId: 0, //id da câmera
	file: "./myPic.jpg"
})
console.log("Foto tirada!")
// obtenha o último texto da área de transferência
let clipText = await termux.getClipboard();
console.log("O último texto que você copiou foi\n" + clipText)
// injete um texto na área de transferência
await termux.setClipboard("Hello World!")
console.log(`Copiei "Hello World!" pra sua área de transferência!`)
// obtenha lista de contatos
let conList = await termux.contactList()
console.log("sua lista de contatos\n", conList)
// exiba uma caixa de diálogo
await termux.dialog({
	type: "confirm", // confirm, checkbox, counter, date, radio, sheet, spinner, speech, text, time
	title: "Meu diálogo",
	hint: "Digite algo aqui"
	/*
se você estiver usando os tipos checkbox, radio, sheet, spinner você precisará passar o parâmetro obrigatório "choices"
choices: ["option1", "option2", "option3"]
*/
	/*
o tipo counter possui um parâmetro opcional chamado "counterOptions"

counterOptions: [1, 10, 5]
min, max, começar em
*/
})
// faça download de algum arquivo
await termux.download({
	filename: "download-image.jpg",
	url: "https://exemplo.com/image.jpg",
	path: "./"
})
// validação com digital
let digital = await termux.fingerprint("Título", "descrição")
console.log(digital)
// obtenha localização
let gps = await termux.gps();
console.log(gps)
// reproduza algum tipo de mídia no fundo
await termux.mediaPlayer(
	"play", //play, resume, stop
	"./myvideo.mp3",
	30 // volume, opcional
)
// altere o volume do seu celular
await termux.volume(
	"music", // saída de áudio: music, alarm, notification, ring, system, call
	50
)
// grave áudio!
let gravAudio = await termux.record(
	"play",
	"./myrecord.mp3"
)
console.log(gravAudio)

// pare a gravação!
let gravAudio = await termux.record(
	"stop",
	"./myrecord.mp3"
)
// abra um arquivo com o aplicativo padrão
await termux.openFile("./example.jpg")
// abra um link no navegador!
await termux.openUrl("https://google.com")
// exiba uma notificação!
await termux.notification({
	title: "Example",
	text: "Hello World!",
	id: 001
})

// remova a notificação
await termux.notificationRemove(001)
// liste os sensores do dispositivo
let sensors = await termux.sensorsList();
console.log(sensors)
// lista de SMS!
let smsList = await termux.smsList()
console.log(smsList)
//envie um SMS!
await termux.smsSend({
	to: 0000,
	simSlot: 0, //0, 1 se você tiver mais de um chip
	text: "Hello World!"
}
	```
	```javascript
	// faça uma chamada de voz
	await termux.call(0000)
	```
	```javascript
	// obtenha dados do dispositivo
	let deviceInfo = await termux.deviceInfo();
	 console.log(deviceInfo)
	 ```
	 ```javascript
	 // exiba um aviso/popup
await termux.alert({
	text: "Hello World",
	background_color: "grey",
	text_color: "white",
	position: "bottom"
})
	 ```
	 ```javascript
	 // ative/desative a lanterna
await termux.flashlight(true)
// obtenha dados sobre TTS engine
let ttsInfo = await termux.ttsInfo()
console.log(ttsInfo)
// use TTS para falar
await termux.ttsSpeak({
	text: "Hello World!",
	language: "en",
	stream: "music" //saída: alarm, music, notification, ring, system
})

/* parâmetros opcionais 

				engine,
				language,
				region,
				variant, (variante da língua para falar)
				pitch, (normal é 1.0)
				rate, (normal é 1.0)
				stream
*/
// vibrar o dispositivo
await termux.vibrate(
	1000, // 1 segundo (ms)
	true // opcional, força a vibração mesmo no modo silencioso
	)
// alterar o wallpaper 
await termux.setWallpaper({
	file: "./myWallpaper.jpg"
})

// ou passe uma URL como parâmetro
await termux.setWallpaper({
	url: "https://myimage.jpg",
	lockscreen: true // altera o fundo da tela de bloqueio 
})
// obtenha dados sobre sua conexão
let connInfo = await termux.connectionInfo()
console.log(connInfo)
// ligar / desligar wifi
await termux.wifiEnable(false)
// escaneie as redes wifi disponíveis
let wfscan = await termux.wifiScan()
console.log(wfscan)

Observação: não há garantias de funcionamento em celulares muito antigos (e nem com androids mais recentes). Todos os testes foram feito em um celular android 10. Para garantir um bom funcionamento, forneça todas as permissões necessárias para Termux e Termux-Api, além de remover ambos os apps da economia de bateria do seu dispositivo.