2020年6月13日土曜日

Rakuten miniでiBeacon受信

わー、Androidの記事何年ぶりだろー。

Googleの聴覚障害支援アプリを試したいけどお金がない……と思っていたところに楽天ミニが1円だったので買ってみました(貧乏人の発想ですね)。

聴覚障害支援アプリ、ヘッドホン繋げないので補聴器っぽいアプリはまだ試せていないんですが、音声書き起こしアプリは精度高いし英語と日本語切り替えワンタッチだし、素晴らしい。なにせ無料(貧乏人の限界ですね)。

もうこれだけで1円の元は取れましたが(この先も1円とは言ってない)、それだけではもったいないので、マイコンとの連携で遊んでみようと思います。お題はBeaconの受信です。ちゃんと通信するならBLEでガツガツ書けばいいんですが、Beaconはペアリングも不要で32bitのペイロードがあるのでマイコンからのちょっとした通知が非常に簡単です。

それはともかく、Android Studio最高ですね。

■参考にしたサイト■

とはいえAndroidに触るのは2.3以来、さくっと動かすだけで勉強するのは面倒くさい(金持ちになれない人の発想)ってんで、とっかかりが必要です。こちらの記事が大変参考/勉強になりました。

サクッとコピペします。ただ、ほんの2年前の記事ですがいろいろ変わっています。

「プロジェクト構造」からだとbeacon libraryが見えなくなってしまっているので、Dependencyは以下の2つを追加します。
    implementation 'org.altbeacon:android-beacon-library:2.17.1'
    implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0'
マニュフェストには以下を追加します。
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-feature
        android:name="android.hardware.bluetooth_le"
        android:required="true" />
    <uses-permission-sdk-23 android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
onCreateでビーコン関連を生成する前には以下のようにロケーションアクセスの確認が必要です。この辺iOSと同じっすね。
これでビルドして実機で起動するとBeacon使っていいか?とダイアログが出てきます。

テスト用のビーコンとしては、Macのターミナルからビーコンの発信停止ができるmbeaconを使いました。

これを初期設定
$ defaults write mbeacon uuid -string "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
$ defaults write mbeacon measuredPower -integer -45
したあとに
$ mbeacon -major 0 -minor 0

でビーコンを出すとわりとすぐに「D/iBeacon: Enter Region」、ctrl+Cで止めると数秒後に「D/iBeacon: Exit Region」が表示されます。

よかったよかった。

■余談■

このところ、玄関に来客を検知したらAppleWatchに通知飛ばせないかと、アプリを書かない範囲でいろいろ調べてました。IFTTTからslack, twitterまでは瞬時に通知が届くんですが、その先がどうも不安定でお客さん待たせてしまう、ってんでボツ。

だったのですが、楽天ミニならポケットに入れっぱなしでも気にならないので、Androidで作ろうかなと思ってます。iOSこういうのをサクッと作れないからね(コーディングは簡単。MFiなど周辺の縛りが面倒くさい)。