bluetoothの3端末debugをやっていたら、初回の端末登録画面で、androidのcentralの画面表示がおかしくなった。
調べてみると、なぜだか、oncharacteristicChangedが2回同間隔で呼ばれてしまっていました。
そして、ありえないログになってしました。
01-31 14:33:38.559 4109-4155/com.jiji.everybody D/org.cocos2dx.cpp.AppActivity: call onCharacteristicChanged uuid = 7F855F82-9378-4508-A3D2-CD989104AF22 01-31 14:33:38.559 4109-4122/com.jiji.everybody D/org.cocos2dx.cpp.AppActivity: call onCharacteristicChanged uuid = 7F855F82-9378-4508-A3D2-CD989104AF22 01-31 14:33:38.563 4109-4155/com.jiji.everybody D/org.cocos2dx.cpp.AppActivity: call onCharacteristicChanged = g":-1,"i_m":false,"m_o":1,"r_k":-1,"s_k":-1,"t_o_n":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 01-31 14:33:38.566 4109-4122/com.jiji.everybody D/org.cocos2dx.cpp.AppActivity: call onCharacteristicChanged = g":-1,"i_m":false,"m_o":1,"r_k":-1,"s_k":-1,"t_o_n":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
実際のコードはこうなっています。
@Override
public void onCharacteristicChanged(BluetoothGatt gatt, final BluetoothGattCharacteristic characteristic) {
Log.d(TAG, "call onCharacteristicChanged uuid = " + uuid);
if (getString(R.string.uuid_characteristic).equals(uuid)) {
final String jsonString = characteristic.getStringValue(0);
Log.d(TAG, "call onCharacteristicChanged = " + jsonString);
}
}
このログをみる限り割り込んで処理されていることがわかります、
マルチスレッドになっちゃってる。
まだ、原因がわかってなくて調査中。
そして、このバグはだいたい6回に1回起きるので、発生させるまでが超大変。
開発を手伝ってくれる優秀なパートナーが欲しい!