これ高校卒業前にやっとけば面白かったのでは
テレビちゃんに卒業式でつける花(なんていうの?)をつけた
本題
どうやらCOCOA
の電波を拾えるらしい?試してみる
ちな一回も通知来たことない(いいことじゃん)
環境
公式ドキュメント
日本語版はBluetoothAdapter#startLeScan()
を使ってますが、これは非推奨なので英語版を見ましょう。
https://developer.android.com/guide/topics/connectivity/use-ble
つくる
AndroidManifest.xml
ブルートゥースの権限が必要であることを示します。
特に一番下のandroid.permission.ACCESS_FINE_LOCATION
は、ユーザーに許可を求めるタイプの権限です。
appフォルダ内のbuild.gradle
権限を求めるため、今までのonActivityResult()
を使ってもいいんですけど、今回はActivity Result API
を使いたい。
のでActivity
とFragment
のバージョンをあげます
MainActivity.kt
BLEに対応しているか
BLEに対応しているかを返す関数を書いて
BluetoothAdapter
が必要らしいので
Bluetoothが有効?
ブルートゥースがONになっているかを確認します
BLE端末が検出したら呼ばれるコールバック
を書きます。
検出を始める
10秒後に検出を終了するようにしときました。
とりあえずはUUIDの制限を掛けずにスキャンしてみます
権限を求める
Activity Result API
のおかげで簡単になった。
onCreate()
onCreate()
でそれぞれ呼べばいいかな
ここまで
どれがCOCOAの電波ですか?
このままではすべての電波を取得してしまうので、COCOA
の電波に限定してあげる必要があるのですが、ここらへんはよく知りません。
2つの方法でこの問題を解決することが出来ます。
電波強度
ScanResult#rssi
で取れます。単位は謎
start()関数を書き換える方法
眺めてると0000fd6f-0000-1000-8000-00805f9b34fb
がCOCOAのUUID?らしいのでこれに限定してあげればいいと思います。
コールバックで限定する
もしくは、すべての電波を取得したあとにUUIDでフィルターしてもいいと思います
UIも作る
ViewBinding
を有効にしてください。
日本語版ドキュメントにはviewBinding { enable = true }
しろって書いてありますが、これは古くて以下の方法が正解です
app/build.gradle
を開いて
buildFeatures {
viewBinding true
}
が正解です。
activity_main.xml
MainActivity.kt
電波強度も表示してみたけど見方がわからん
そーすこーど
間違ってたらごめんね
https://github.com/takusan23/CocoaBLECheckerSample
参考にしました
https://qiita.com/Rabbit_Program/items/3c1aec6e30eb646d78a1
https://engineer.dena.com/posts/2021.02/web-bluetooth-cocoa-checker/
https://qiita.com/jp-96/items/3e5e5a12d42ba246b8c3
https://qiita.com/coppercele/items/fef9eacee05b752ed982