studio scanner libreria example dispositivos devices buscar app android bluetooth bluetooth-lowenergy android-6.0-marshmallow

scanner - libreria bluetooth android



Bluetooth Low Energy startScan en Android 6.0 no encuentra dispositivos (3)

Como @Jacopo Tosi dice que debe solicitar permisos de ubicación. Puedes leer here cómo hacerlo. Y también debes activar Ubicación. No sé por qué lo hicieron. pero es la única forma en que logré hacerlo funcionar.

Estoy desarrollando una aplicación con Bluetooth Low Energy usando Nexus 5. Funcionó en Lollipop y ahora no funciona en Marshmallow. Configuré los permisos ACCESS_COARSE_LOCATION y ACCESS_FINE_LOCATION en el manifiesto y en runTime en la Actividad.

Esta es la lista de ScanFilters:

mScanFilterTest = new ScanFilter.Builder().build(); mScanFilter = new ArrayList<ScanFilter>(); mScanFilter.add(mScanFilterTest);

Estas son las configuraciones:

mScanSettings = new ScanSettings.Builder().setScanMode(ScanSettings.SCAN_MODE_LOW_POWER).setReportDelay(0) .setCallbackType(ScanSettings.CALLBACK_TYPE_ALL_MATCHES).build();

Estas son mis devoluciones de llamada:

mBLEScan = new ScanCallback() { @Override public void onScanResult(int callbackType, ScanResult result) { super.onScanResult(callbackType, result); Log.i(TAG, "******************************************"); Log.i(TAG, "The scan result " + result); Log.i(TAG, "------------------------------------------"); } };

Esta es mi llamada:

mBluetoothLeScanner.startScan(mScanFilter, mScanSettings, mBLEScan);

Comienza el escaneo pero no encuentra ningún dispositivo. ¡¡¡¡Por favor, ayúdame!!!!


En mi caso (HTC M9) también tuve que ir al menú de configuración de Android en Bluetooth y buscar manualmente dispositivos BT.


Luché con el mismo problema. Para solucionarlo, debe habilitar "Ubicación" (GPS) en la configuración del teléfono , así como solicitar permiso de ubicación en la aplicación en tiempo de ejecución. Ambos deben hacerse para que el escaneo funcione correctamente.

Para solicitar el permiso de ubicación, coloque lo siguiente en un cuadro de diálogo o Me gusta:

yourActivity.requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, yourPermissionRequestCode);

e implementar:

@Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults){ if(requestCode == yourPermissionRequestCode) { ... //Do something based on grantResults } }

en su yourActivity y maneje lo que el usuario seleccione. También debe hacer lo siguiente para activar los servicios de ubicación de su dispositivo:

Intent enableLocationIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); yourActivity.startActivityForResult(enableLocationIntent, yourServiceRequestCode);

Puede verificar si el usuario activó los servicios de ubicación implementando:

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if(requestCode == yourServiceRequestCode) { ...//Do whatever you need to } }

en yourActivity . También puede activar manualmente los servicios de ubicación (GPS) haciendo lo siguiente:

Enter phone settings -> Select "Location" -> Then turn it on

Debería verse así en la configuración del teléfono:

O así en el menú desplegable de configuración rápida:

Una vez que el usuario ha habilitado el permiso y ha comenzado los servicios de ubicación, debe comenzar a escanear. Me di cuenta de que si ya está escaneando mientras habilita el permiso / activa el servicio de ubicación, todavía no colocará nada en su onScanResults

No estoy seguro de si esto es un error o una "función" para la publicidad de iBeacons / Bluetooth (NOTA: la publicidad como en la venta de productos, no la publicidad técnica de Bluetooth) para permitir que las empresas vean su ubicación y lo dirijan a donde quieran.

¡Espero que esto solucione tu problema!

EDITAR Quería agregar: solo necesitas esto para ESCANEAR. Una vez que esté conectado al dispositivo BLE, puede apagar el servicio de ubicación en su teléfono y aún estará conectado a sus dispositivos. Sin embargo, no puede descubrir o conectarse a ningún dispositivo nuevo y todos los dispositivos publicitarios se eliminarán de onScanResults