GitHubに公開したAndroidアプリ「BleSwitch」について(使い方)

使い方

設定

設定メニュにて、指定できる項目は以下の通りです。

  • デバイス名(例 PochiruEco0099999)
  • デバイスアドレス(例 12:34:56:78:9A:BC)
  • サービスUUID(省略時はb3b36901-50d3-4044-808d-50835b13a6cd(*1)

*1:このサービスUUIDは「PochiruEco」固有のものです。

機能

本アプリはBLEデバイスのボタン操作をスマホアプリに橋渡しするアプリです。BLEデバイスをスマホアプリの起動スイッチとして使うことが可能になります。

例えば、公開コードでは下記のようにしています。

  • BLEデバイスのボタンをONする
  • 本アプリが察知して設定しておいたスマホアプリを起動する
  • 起動されたスマホアプリが何かする(公開コードではカメラアプリが起動する)

全体の流れ

ステップ1: 設定画面にて、BLEデバイスを特定するための情報を設定する

①右上にある縦に点が並んだところをタッチする
clip-20191006163235.png
②各パラメータを指定する
clip-20191006163451.png
③テーマをダークにすれば、メイン画面でパラメータを隠すことができる
clip-20191006163722.png

ステップ2: 「Start service」ボタンをタッチすると、スマホにサービスとして登録される

④「Stop service」に変わる
clip-20191006163828.png
⑤サービスの状態はこんな感じ(開発者モードで確認)だが、確認する必要はない
clip-20191006163609.png

サービスとして登録されると、バックグラウンドで以下を行います:

  • BLEデバイスをスキャンする
  • 設定画面で設定した内容に沿ったBLEデバイスからの発信が見つかると、スキャンを中止してBLEデバイスに接続してアドバタイジングを中断させる。
  • スマホアプリを起動する。
  • BLEデバイスをスキャンを再開する

公開コードにて呼び出しているスマホアプリ

  • インテント(package): com.krasavkana.android.decoycamera
  • インテント(activity): com.krasavkana.android.decoycamera.CameraActivity
  • インテント呼び出し時に渡すパラメータ: (Key)ble-command (Value)Shoot!Shoot!

Androidのバージョンによる動作の違い

⑥Foregroundサービスとして登録されると通知にアイコンが現れる。解除されると消える
clip-20191006164117.png
⑦通知をみたところ。公開サンプルではメディアとして登録した
clip-20191006164207.png

Android9.xではForegroundサービスとして登録しています。それ以前のバージョンでは通常のサービスとして登録しています。

ステップ3: スマホアプリ(公開コードではカメラアプリ)が起動して5秒以内に撮影する

⑧スマホアプリ起動前の画面例
clip-20191006170148.png
⑨スマホアプリ起動後の画面例。極小ファインダと2つのボタンが見える。ナビゲーションが白色
clip-20191006170458.png

撮影タイミングは実機テストに使った端末に合わせて調整しています。

Android9.x(実機はGalaxyJ6+)ではLOW_LATENCYモードで100ms毎スキャンします。
それ以外のバージョンではLOW_ENECYモードで起動します。2000msでスキャン3000ms休止のくり返しになります。実機ではスキャンできなかったり一回のボタン操作にもかかわらず2回以上信号を受けてスマホアプリを起動してしまうことがありました。

ステップ4: 撮影完了後、スマホアプリ(公開コードではカメラアプリ)が自動で終了する

ステップ5: 「Stop service」ボタンをタッチすると、サービスが解除される

⑩Foregroundでない通常のサービスなので通知にアイコンはない
clip-20191006164457.png

カメラアプリについて

本アプリの公開コードにて起動しているスマホアプリですが、以下URLにて同じくGitHubにて公開しています。

https://github.com/krasavkana/android-camera2api-decoycamera

公開コードの改変について

本アプリの公開コードの公開目的はサンプルの提示です。BLEデバイスはボタン電池で長期間動作してくれるので、様々なIoT機器としてこれから世の中に出てくるでしょう。BLEデバイスを扱うアプリのコードサンプルとして参考にしていただればと思います。

じぶんでいろいろ改変したい場合は、GitHubに公開したコードで試してみてください。

https://github.com/krasavkana/android-ble-switch

公開日から時間がたつと(例えば1年以上かな?)、Android-SDKのサポート状態とギャップが出て、公開したコードやビルドスクリプト(Gradle)そのままでは動作しない場合がありますので、注意してください。

リリース用APKファイル

リリース用にビルドした署名付きAPKファイルを本ブログ配下に置いています。

androidアプリ「BleSwitch」リリース用APKファイル
androidアプリ「DecoyCamera」リリース用APKファイル

GitHubの公開コードをローカル開発環境(AndroidStudio3.x)にクローンしてきてビルドしても得られるものですが、そうした環境をお持ちでない方のために用意しました。

どういう動作になるのか。興味のある方はいろいろ試してみてください。

Android9.xの実機(GalaxyJ6+)ではうまく動作しており、ボタン操作の取りこぼしなく、操作後1秒以内にカメラアプリが起動して撮影できることを確認しています。

関連する記事・ページ

GitHubに公開したAndroidアプリ「BleSwitch」について(技術解説)
GitHubに公開したAndroidアプリ「BleSwitch」について(使い方)
GitHubに公開したAndroidアプリ「BleSwitch」について(概要)

お世話になったリンク

Android 5.0におけるBLE について – 受信編 –
THETA プラグインで 市販の BLE ボタンをリモコンにしてみた
iBeaconとは

以上です。