Что бы не выбрасывать старый android телефон можно использовать его для наблюдения за дачным периметром или за подачей электроэнергии. Можно даже сделать удаленное управление электро приборами через iot розетки. И для этого совсем необязательно разрабатывать полноценное приложение под android.

Попытаемся реализовать съёмку по удаленной команде. Управлять устройством мы будем через Telegram, отсылая нужные команды botу запущенному под androidом. Список команд:

  • /photo - получить фотографию.
  • /info - получить информацию о телефоне.

Воспользуемся приложениями из маркета: Termux,Termux:API. Это полноценный shell с пакетным менеджером.

Из termuxа выполняем:

apt update
apt upgrade
apt install termux-api golang
termux-setup-storage
mkdir ~/storage/shared/golang
echo "export GOPATH=~/storage/shared/golang" > ~/.bash_profile

Сделаем снимок из консоли:

termux-camera-photo test.jpg

Создаем бота через @BotFather. Полученый token и ваш username подставим в код бота:

package main

import (
	"gopkg.in/telegram-bot-api.v4"
	"log"
	"os/exec"
)

var (
	token    = "key"
	username = "user"
)

func main() {
	bot, err := tgbotapi.NewBotAPI(token)
	if err != nil {
		log.Panic(err)
	}
	bot.Debug = true
	log.Printf("Authorized on account %s", bot.Self.UserName)
	u := tgbotapi.NewUpdate(0)
	u.Timeout = 60
	updates, err := bot.GetUpdatesChan(u)
	for update := range updates {
		if update.Message == nil {
			continue
		}

		log.Printf("[%s] %s", update.Message.From.UserName, update.Message.Text)
		if update.Message.From.UserName == username {
			if update.Message.Text == "/info" {
				out, err := exec.Command("termux-battery-status").Output()
				txt := ""
				if err != nil {
					txt = err.Error()
				} else {
					txt = string(out)
				}

				msg := tgbotapi.NewMessage(update.Message.Chat.ID, txt)
				//msg.ReplyToMessageID = update.Message.MessageID
				bot.Send(msg)
			}
			if update.Message.Text == "/photo" {
				_, err := exec.Command("termux-camera-photo", "send.jpg").Output()

				if err != nil {
					bot.Send(tgbotapi.NewMessage(update.Message.Chat.ID, err.Error()))
				} else {

					photo := tgbotapi.NewPhotoUpload(update.Message.Chat.ID, "send.jpg")
					bot.Send(photo)
				}
			}
		}
	}
}