2016/02/24

[ble][android]BDSのAndroidアプリ (2)

前回は、AndroidManifest.xmlを見た。
次は、MainActivity.java。

 

ctagsが抽出してくれたメソッドは、これら。

image

一番下のgetView()は、リストにスキャンして見つかったデバイス名を設定している。
ListViewのことを調べたときにやった気がしなくもない。。が、覚えてない。
このときにはListAdapter<>をextendsしていたが、ここではListAdapterのインスタンスを作ってsetAdapter()している。

ListAdapterってなんじゃ、と思ったら、BaseAdapterをextendsしたクラスだった。
さっき「getView()は」と書いたが、メソッド名一覧のListAdapter~getViewまではListAdapterクラスのメソッドだった。

Bluetooth機器制御に使いそうな名前のBluetoothDeviceクラスのインスタンスは、ListAdapterが持っている。
それに設定をするのは、BLEのスキャン結果コールバックであるScanCallback#onScanResult()のようだ。
結果がBluetoothDeviceのインスタンスで渡されるので、それをそのまま設定しているようだ。

 

私が作るんだったら「ListAdapterは名前と、オブジェクトと紐付けるインデックスみたいなのだけ持っておけばいい」って作ってしまいそうだ。
でも、スキャン結果として渡されるBluetoothDeviceも、ListAdapterで持つBluetoothDeviceも、結局ポインタでしかないので、本体はここにないのだ。
だったら、まあいいか、と思ってしまう。

でも、自分で管理してないメモリがあると、なんかもぞもぞしますな。

 

さて、スキャンした結果がリストにずらずら出てくる。
それを1つタップしたときの動作は、onCreate()に定義してある。
タップした位置のBluetoothDeviceをListAdapterから取得して、デバイス名とアドレスを引数にしてPeripheralControlActivityをstartActivity()する。

 

Androidに慣れている人だったら、さらっと見ておしまいなんだろうね。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。