半分Java、半分Androidだ。
まず、コールバックしたい。
こちらはJavaだ。
コールバックする側interfaceを作っておき、コールバックしてほしい人はそのインスタンスを作り、中身を作っておく。
そしてコールバックする側に渡す。
コールバックする側は、そのメソッドを呼ぶだけ。
// コールバックする側がinterfaceを作っておき、
--------------
//コールバックしてほしい人はそのインスタンスを作り、
//中身を作っておく
Log.d(TAG, "callbacked");
};
//そしてコールバックする側に渡す
xxClass xx = new xxClass();
//コールバックする側は、そのメソッドを呼ぶだけ
void function(callback cb) {
cb.onResult(0);
interfaceじゃなくてabstractってのでやろうとしたけど、なんかダメだった。
気が向いたらちゃんと調べよう。
コールバックした先でToastを表示したい。
こっちはAndroidだ。
やったんだけど、コンテキストが違うせいか、コンパイルで怒られた。
BleUtils.scanResultCallbackは、上でいうところのxxClass.callbackだ。
Log.d()は使えたんだけど、Toastはだめだって。
まあ、画面に何か出すんだから、UIコンテキストじゃないとダメなのかな(追求してない)。
これは確か、BLEのサンプルで何かやっていた。
byte[] scanRecord) {
このrunOnUiThreadってのがそれっぽいようだ。
が、同じようにしてみたけど、やはり怒られる。
うーむ。
あれだ、コンテキストが違うので、第1引数をthisってしてもだめなようだ。
getApplicationContext()とすると、エラーが消えた(参照：モバイル開発系(K))。
そうかそうか。
もう１つ。
コールバックの引数で文言を変えたい。
このときは、仮引数の宣言をfinalにするとよいようだ。
スタック渡しだからダメなんだろうと思っていたんだけど、Javaだから「まだ使います」って言っておけばよいということなのかね。
これでようやく、BLEの検索結果を戻せるところまで来た。