2015-11-02 3 views
2

Моему приложению необходимо подключиться к устройству Bluetooth Low Energy, и, очевидно, первым шагом является его обнаружение. Я написал код ниже, чтобы сделать именно это. Когда я запускаю приложение, у меня есть другое устройство BLE (Xperia M2) рядом с моим телефоном Dev (Huawei P8 Lite) с Bluetooth ON и обнаруживается, однако ничто не печатается на логарифме. Является ли устройство действительно не обнаруженным или является функцией обратного вызова, которая не вызывается/не работает. Что я могу сделать, чтобы определить, какая из этих ситуаций происходит?Устройства Bluetooth LE не обнаружены

scanBluetoothMethod называется в другом месте кода.

private BluetoothManager bluetoothManager; 
private BluetoothAdapter bluetoothAdapter; 
private static final long SCAN_PERIOD = 10000; 
private BluetoothLeScanner scanner; 
private Handler scanHandler = new Handler(); 
private List<ScanFilter> scanFilters = new ArrayList<ScanFilter>(); 
private ScanSettings scanSettings; 
private boolean scanRunning=false; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_add_pandlet); 

    ... 

    bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE); 
    bluetoothAdapter = bluetoothManager.getAdapter(); 
} 


private void scanBluetoothLE() { 

    if (bluetoothAdapter == null || !bluetoothAdapter.isEnabled()) { 
     Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 
     startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); 
     return; 
    } 

    progressDialog = new ProgressDialog(this); 
    progressDialog.setMessage(getString(R.string.addpandlet_searchingforbledevices)); 
    progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
    progressDialog.setCancelable(false); 
    progressDialog.setCanceledOnTouchOutside(false); 
    progressDialog.setIndeterminate(true); 
    progressDialog.setButton(DialogInterface.BUTTON_NEUTRAL, getString(R.string.addpandlet_cancelsearch), new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      scanner.stopScan(scanCallback); 
      scanHandler.removeCallbacks(scanRunnable); 
      scanRunning = false; 
      return; 
     } 
    }); 


    ScanSettings.Builder scanSettingsBuilder = new ScanSettings.Builder(); 
    //scanSettingsBuilder.setCallbackType(ScanSettings.CALLBACK_TYPE_ALL_MATCHES); 
    scanSettingsBuilder.setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY); 
    scanSettings = scanSettingsBuilder.build(); 

    scanHandler.post(scanRunnable); 

} 


private Runnable scanRunnable = new Runnable() { 
    @Override 
    public void run() { 
     scanner = BluetoothAdapter.getDefaultAdapter().getBluetoothLeScanner(); 

     if (scanRunning) { 
      scanner.stopScan(scanCallback); 
      progressDialog.hide(); 
      scanRunning = false; 
     } else { 
      scanRunning = true; 
      progressDialog.show(); 
      scanHandler.postDelayed(this, SCAN_PERIOD); 
      scanner.startScan(scanFilters, scanSettings, scanCallback); 
     } 
    } 
}; 


private ScanCallback scanCallback = new ScanCallback() { 
    @Override 
    public void onScanResult(int callbackType, ScanResult result) { 

     System.out.println(result.getRssi() + " " + result.getDevice().getName()); 

     super.onScanResult(callbackType, result); 

    } 

    @Override 
    public void onScanFailed(int errorCode) { 
     System.out.println("Error code " + errorCode); 

     super.onScanFailed(errorCode); 

    } 
}; 



@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    if(requestCode == REQUEST_ENABLE_BT && resultCode == Activity.RESULT_OK) 
     scanBluetoothLE(); 


} 

ответ

1

Из кода - BluetoothAdapter.getDefaultAdapter().getBluetoothLeScanner(); кажется, что вы пытаетесь сканировать устройства Bluetooth энергии devices..The низки вы используете, я предполагаю, что поддерживает только классический Bluetooth.

Попробуйте , используя устройства, которые рекламируют bluetooth услуги с низкой энергией.. Вы можете создать приложение, которое рекламирует услуги на устройстве, поддерживающем низкую энергию Bluetooth.

Для того, чтобы убедиться, что устройство обнаружено модулем Bluetooth-устройства по умолчанию, вы можете перейти в Настройки-> Bluetooth и сканировать.

Также вы можете проверить, является ли устройство обнаружено некоторыми другими стандартными приложениями на playstore- https://play.google.com/store/apps/details?id=no.nordicsemi.android.mcp&hl=en

+0

Оба устройства поддерживают Bluetooth 4.0, в соответствии с листом спецификации. Есть ли другие требования? Один работает под управлением Android 5.0, а другой - с Android 4.4.4. – AmiguelS

+0

Даже если его 4.0, я предполагаю, что на устройстве должно быть какое-то обслуживание. Также вы можете проверить, обнаружено ли устройство некоторыми другими стандартными приложениями на playstore-https: //play.google.com/store/apps/details. ? id = no.nordicsemi.android.mcp & hl = ru –

+0

Я попробовал несколько проверок совместимости с BLE на обоих устройствах, и все возвращают положительные. Однако приложение, которое вы разместили, не может найти другое устройство, несмотря на то, что оно сканирует ... – AmiguelS

Смежные вопросы