Bluetoothでiosのperipehralでandroidが2度登録されてしまう問題(誰か助けて!)

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回起きるので、発生させるまでが超大変。

開発を手伝ってくれる優秀なパートナーが欲しい!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です