title: Android BLE: List of discovered characteristics in service is incomplete
body: <p>Attempting to read characteristics from a GATT service, the list is incomplete compared to the list I get from an iOS device, or the manufacturer guide.</p>
  
  <p>I am reading the characteristics as follows:</p>
  
  <pre><code>private final BluetoothGattCallback mGattCallback = new BluetoothGattCallback() {
          @Override
          public void onConnectionStateChange(BluetoothGatt gatt, int status,
                                              int newState) {
              if (newState == BluetoothProfile.STATE_CONNECTED) {
                  mConnectionState = STATE_CONNECTED;
                  mBluetoothGatt = gatt;
                  if (shouldStartWriting &amp;&amp; writeCharacteristicsQueue.peek() != null) {
                      mBluetoothGatt.writeCharacteristic(writeCharacteristicsQueue.poll());
                  } else {
                      EventBus.getDefault().post(new BTGattStatusEvent(BTGattStatusEvent.Status.CONNECTED));
                      Log.i(TAG, "Attempting to start service discovery:" +
                              gatt.discoverServices());
                  }
  
              } else if (newState == BluetoothProfile.STATE_DISCONNECTED) {
                  mConnectionState = STATE_DISCONNECTED;
                  mBluetoothGatt = null;
                  EventBus.getDefault().post(new BTGattDisconnectedEvent());
              }
          }
  
          @Override
          // New services discovered
          public void onServicesDiscovered(BluetoothGatt gatt, int status) {
              EventBus.getDefault().post(new BTGattStatusEvent(BTGattStatusEvent.Status.DISCOVERED));
  
              if (status == BluetoothGatt.GATT_SUCCESS) {
                  for (BluetoothGattService service : gatt.getServices()) {
                      LOGD(TAG, "Found Service " + service.getUuid().toString());
                      discoverCharacteristics(service);
                  }
                  gatt.readCharacteristic(readCharacteristicsQueue.poll());
              } else {
                  Log.w(TAG, "onServicesDiscovered received: " + status);
              }
          }
  
      @Override
      // Result of a characteristic read operation
      public void onCharacteristicRead(BluetoothGatt gatt,
                                       BluetoothGattCharacteristic characteristic,
                                       int status) {
          if (status == BluetoothGatt.GATT_SUCCESS) {
              parseCharacteristic(characteristic);
              LOGD(TAG, String.format("%s | %s ", characteristic.getUuid(), characteristic.getIntValue(BluetoothGattCharacteristic.FORMAT_UINT16, 0)));//(BluetoothGattCharacteristic.FORMAT_UINT16));
  
              if (readCharacteristicsQueue.peek() != null) {
                  gatt.readCharacteristic(readCharacteristicsQueue.poll());
              } else {
                  EventBus.getDefault().post(new BTGattStatusEvent(BTGattStatusEvent.Status.DONE_DISCOVERING));
              }
          }
      }
  </code></pre>
  
  <p>and</p>
  
  <pre><code>private void discoverCharacteristics(BluetoothGattService service) {
      for (BluetoothGattCharacteristic gattCharacteristic : service.getCharacteristics()) {
          LOGD(TAG, "Discovered UUID: " + gattCharacteristic.getUuid());
          readCharacteristicsQueue.add(gattCharacteristic);
      }
  
  }
  </code></pre>
  
  <p>I also attempted to get this characteristic using <code>getCharacteristic</code>, but I received a null.</p>
  
  <p>The characteristics found are:</p>
  
  <pre><code>Discovered UUID: 0000fff1-0000-1000-8000-00805f9b34fb
  Discovered UUID: 0000fff2-0000-1000-8000-00805f9b34fb
  Discovered UUID: 0000fff3-0000-1000-8000-00805f9b34fb
  Discovered UUID: 0000fff4-0000-1000-8000-00805f9b34fb
  Discovered UUID: 0000fff5-0000-1000-8000-00805f9b34fb
  </code></pre>
  
  <p>However, on iOS and according to the manufacturer, there should also be a 0000fff7.</p>
  
  <p>Why isn't this characteristic being read?</p>
  
  <p>UPDATE:
  Nothing happened here. Not one of Android's BLE scanning apps can discover it.</p>