Androidでカメラを作る ~ その2:物理ボタンの処理
さて、いよいよM5StickCのボタンを押して写真を撮ります。
M5StickCからスマートフォンへ通信をすることでシャッターを切る訳ですが、bluetoothにしろ、UDPにしろプログラムが大変だなあと考えていたら、とても簡単な方法で実現する記事を見つけました。
なるほど、M5StickCをbluetoothキーボードに見立てて、音量ボタンを押したことにしてスマートフォンのカメラアプリのシャッターを切れば良いのです。スマートフォンのカメラアプリの多くは音量ボタンでシャッターが切れるように作られているので、汎用性があります。
結局、自分でカメラアプリを作る必要性がなくなったわけですが、せっかくカメラアプリを作り始めたので、自分用にカスタマイズしたカメラアプリを作ることにします。
1.M5StickC側のプログラム
上記の「Wak-tech」さんのコードを、ほぼそのまま使わせて頂きました。注意する点として、「ESP32 BLE Keyboard library」を入手する必要があります。以下からライブラリをダウンロードして
https://github.com/T-vK/ESP32-BLE-Keyboard
Arduino IDEにインストールしてください。
また、参考にしたプログラムは「音量+」のボタンにシャッターが割り当てられていますが、今回は「音量ー」のボタンに変更しています。
あとはビルドすればM5StickC側は終了です。
2.Android側のプログラム
@Override
public boolean dispatchKeyEvent(KeyEvent event){
if(event.getKeyCode() == KeyEvent.KEYCODE_VOLUME_DOWN){
if (event.getAction() == KeyEvent.ACTION_UP) {
takePicture();
}
}
return super.dispatchKeyEvent(event);
}
Android側のプログラムは、音量ボタンの押されるイベントを検出します。予定していたbluetoothの受信プログラムは必要なくなりました。
送られてくる「音量ー」のキーイベントですが、押した時と離した時の2回分送られてくるので、離した時のイベントを有効にしています。
この方法は簡単ですが欠点もあって、撮影時に音量のポップアップウインドウが出てしまいます。ちょっとかっこ悪いですが、このままでいきます。
3.動作確認
特に問題なく、M5StickCのボタンイベントをAndroidのカメラアプリで受け取れました。
作成中のカメラアプリですが、まだまだ実装が足りないので、公開は先になります。でも、他のカメラアプリを使っても今回のテストができますので、ぜひやってみてください。
これから先ですが、カメラアプリに自分の必要とする機能を追加していきます。他とはちょっと違ったカメラアプリにするつもりです。