Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Reacción a la publicidad dirigida BLE (ADV_DIRECT_IND) en Android

¿Cómo reaccionar a la publicidad dirigida ( ADV_DIRECT_IND == 0001 ) en Android?

Hay un BLE-gadget que envía la publicidad dirigida a un teléfono Android (con la dirección MAC de código duro del teléfono por ahora) y en mi aplicación de Android me gustaría reaccionar e iniciar una conexión con el gadget y leer el org.bluetooth. El valor de character.location_and_speed del gadget:

captura de pantalla

Por favor avise si es posible por medio de Android 5 API .

  • Cómo programaticamente forzar el descubrimiento de servicios de baja energía de bluetooth en Android sin usar caché
  • Ble scanning callback sólo se llaman varias veces y luego se detiene
  • Cómo conectar un dispositivo Android a un dispositivo iOS a través de BLE (Bluetooth Low Energy)
  • Android 4.3 BTLE como servidor: ¿Cómo iniciar anuncios?
  • Dispositivos con Android 4.2 (Jelly Bean) compatible con Bluetooth de baja energía (BLE)
  • Android BLE BluetoothGatt objeto permanece conectado y desencadena onCharacteristicChanged () incluso después de una llamada a desconectar ()
  • StartLeScan con 128 UUIDs de bits no funciona en la implementación BLE de Android nativa
  • Análisis BLE de Android en el servicio de fondo
  • 2 Solutions collect form web for “Reacción a la publicidad dirigida BLE (ADV_DIRECT_IND) en Android”

    La publicidad directa funciona – al menos con el teléfono HTC M8 y Android 5.0 (API nivel 21 y superior).

    La solución ha sido añadir las direcciones del dispositivo al ScanFilter .

    Si deja los filtros vacíos, no se llamarán las devoluciones de llamada de exploración.

    Aquí mi código de trabajo:

     public static final String TAG = "My_BLE_app"; public static final String DEVICE_1 = "D4:BE:84:72:5B:8E"; public static final String DEVICE_2 = "C4:39:07:19:60:E2"; private Context mContext; private BluetoothAdapter mBluetoothAdapter; private BluetoothLeScanner mScanner; private ScanSettings mSettings; private List<ScanFilter> mFilters = new ArrayList<ScanFilter>(); 

    Primero el método para inicializar BLE:

     public boolean init() { BluetoothManager bluetoothManager = (BluetoothManager) mContext.getSystemService(Context.BLUETOOTH_SERVICE); mBluetoothAdapter = bluetoothManager.getAdapter(); if (mBluetoothAdapter == null) return false; mScanner = mBluetoothAdapter.getBluetoothLeScanner(); mSettings = new ScanSettings.Builder().setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY).build(); mFilters.add(new ScanFilter.Builder().setDeviceAddress(DEVICE_1).build()); mFilters.add(new ScanFilter.Builder().setDeviceAddress(DEVICE_2).build()); return mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE); } 

    Y luego las devoluciones de llamada de exploración:

     private ScanCallback mDirectedScanCallback = new ScanCallback() { @Override public void onScanResult(int callbackType, ScanResult result) { processResult(result); } @Override public void onBatchScanResults(List<ScanResult> results) { for (ScanResult result: results) { processResult(result); } } private void processResult(ScanResult result) { BluetoothDevice device = result.getDevice(); if (device == null) return; String address = device.getAddress(); if (!BluetoothAdapter.checkBluetoothAddress(address)) return; int rssi = result.getRssi(); Log.d(TAG, "address=" + address + ", rssi=" + rssi); // TODO connect to the device in under 1 second } }; 

    Finalmente, el código para iniciar la exploración:

     mScanner.startScan(mFilters, mSettings, mDirectedScanCallback); 

    Sin embargo, una pregunta sigue abierta:

    No sé cómo detectar el tipo de análisis en el lado de Android – es decir, si la exploración fue dirigida o no .

    Para responder parcialmente a la pregunta abierta:
    He notado que el ScanRecord.getBytes() está vacío – todo '\ 0' – para una exploración dirigida ( ADV_DIRECT_IND ) – pero contendría los datos publicitarios de otra manera ( ADV_IND ).

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.