title: Bluetooth LE Scanning Sometimes Doesn't Find Devices
body: <p>I am scanning for Bluetooth LE devices and running as a Peripheral (running Android 6.0 on a Moto G 2nd Gen)</p>
  
  <p>The problem I am having is that sometimes (randomly it seems but often) it will not find any of my other peripheral devices, the other times it works fine.</p>
  
  <p>I have a companion iOS device running similar code (both scanning for peripherals and acting as a peripheral), and when the Android scanning can't find the iOS device, my iOS finds the Android device acting as a peripheral just fine. So it seems only to be a problem with the scanning side of things. </p>
  
  <p>It's not only just not finding my companion iOS device, but doesn't find any Bluetooth devices. When it works, it finds my companion iOS device as well as a bunch of other devices.</p>
  
  <p>I have tried it with and without ScanFilters, and get the same issue.
  I am building against SDK 26 with a minimum SDK of 23.</p>
  
  <p>I am setting the permissions that are needed, as it sometimes works.</p>
  
  <p>Relevant code below:</p>
  
  <pre><code>private void startScanning() {
      mHandler = new Handler(mContext.getMainLooper());
  
      mHandler.postDelayed(new Runnable() {
          @Override
          public void run() {
              ScanSettings settings = new ScanSettings.Builder()
                                          .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
                                          .setReportDelay(0)
                                          .build();
  
              mBluetoothLeScanner.startScan(null, settings, mScanCallback);
          }
      }, 1000);
  }
  
  private ScanCallback mScanCallback = new ScanCallback() {
      @Override
      public void onScanResult(int callbackType, ScanResult result) {
          super.onScanResult(callbackType, result);
  
          if( result == null || result.getDevice() == null )
              return;
  
          Log.e("myTest", "Found Device");
  
          BluetoothDevice device = result.getDevice();
          final String deviceAddress = device.getAddress();
  
          List&lt;ParcelUuid&gt; parcel = result.getScanRecord().getServiceUuids();
  
          if (parcel != null) {
              String parcelUUID = parcel.toString().substring(1,37);
  
              if (parcelUUID.equalsIgnoreCase(mContext.getString(R.string.service_uuid))) {
                  final BluetoothDevice bleDevice = BluetoothAdapter.getDefaultAdapter().getRemoteDevice(deviceAddress);
  
                  if (!seenPeripherals.contains(deviceAddress)) {
                      stopScanning();
  
                      mHandler = new Handler(mContext.getMainLooper());
  
                      mHandler.postDelayed(new Runnable() {
                          @Override
                          public void run() {
                              Log.e("AppToApp", "Trying to connect to device " + deviceAddress);
  
                              mGatt = bleDevice.connectGatt(mContext, false, mGattCallback);
                          }
                      }, 1000);
                  }
              }
          }   
      }
  }
  </code></pre>