前提・実現したいこと
BluetoothGatt.discoverServices()
を呼んだ後、サービスが発見できないのかどれだけ待ってもBluetoothGattCallback.onServicesDiscovered()
が呼ばれないことがあります。
毎回ではなく頻度としては数十回に一回程度で発生します。
接続してから500msほどウェイトを入れたりしても特に効果がないようです。
同じ現象が発生した方いらっしゃいますでしょうか。
該当のソースコード
java
1private final BluetoothGattCallback mGattCallback = new BluetoothGattCallback() { 2 @Override 3 public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) { 4 if (newState == BluetoothProfile.STATE_CONNECTED) { 5 // あまり意味はない? 6 try { 7 Thread.sleep(500); 8 } catch (InterruptedException e) { 9 e.printStackTrace(); 10 } 11 12 mGatt.discoverServices(); 13 } else if (newState == BluetoothProfile.STATE_DISCONNECTED) { 14 if (mGatt != null) { 15 mGatt.close(); 16 mGatt = null; 17 } 18 } 19 } 20 21 @Override 22 public void onServicesDiscovered(BluetoothGatt gatt, int status) { 23 // 呼ばれない 24 Log.d(TAG, "Service discovered"); 25 26 if (status == BluetoothGatt.GATT_SUCCESS) { 27 mService = mGatt.getService(SERVICE_UUID); 28 } 29 } 30}; 31 32private final ScanCallback mScanCallback = new ScanCallback() { 33 @Override 34 public void onScanResult(int callbackType, ScanResult result) { 35 mGatt = result.getDevice().connectGatt(mContext, false, mGattCallback); 36 } 37};
補足情報
Android6/7/8