Poniższy kod działa doskonale na moim Nexusie 9 z systemem Android 5.1.1 (kompilacja LMY48M), ale nie działa na Nexusie 9 z systemem Android 6.0 (kompilacja MPA44l)Funkcja Bluetooth LE ScanFilters nie działa na systemie Android M
List<ScanFilter> filters = new ArrayList<ScanFilter>();
ScanSettings settings = (new ScanSettings.Builder().setScanMode(ScanSettings.SCAN_MODE_LOW_POWER)).build();
ScanFilter.Builder builder = new ScanFilter.Builder();
builder.setManufacturerData((int) 0x0118, new byte[]{(byte) 0xbe, (byte) 0xac}, new byte[]{(byte) 0xff, (byte)0xff});
ScanFilter scanFilter = builder.build();
filters.add(scanFilter);
mBluetoothLeScanner.startScan(filters, settings, new ScanCallback() {
...
});
W systemie Android 5.x powyższy kod powoduje wywołanie zwrotne, gdy wyświetlana jest reklama producenta pasująca do filtru skanowania. (Zobacz przykładowy wynik Logcat poniżej.) Na Nexusie 9 z MPA44l nie są odbierane żadne oddzwanianie. Jeśli wykomentuj filtr skanowania callbacks odbierane są z powodzeniem na Nexusa 9.
09-22 00:07:28.050 1748-1796/org.altbeacon.beaconreference D/BluetoothLeScanner﹕ onScanResult() - ScanResult{mDevice=00:07:80:03:89:8C, mScanRecord=ScanRecord [mAdvertiseFlags=6, mServiceUuids=null, mManufacturerSpecificData={280=[-66, -84, 47, 35, 68, 84, -49, 109, 74, 15, -83, -14, -12, -111, 27, -87, -1, -90, 0, 1, 0, 1, -66, 0]}, mServiceData={}, mTxPowerLevel=-2147483648, mDeviceName=null], mRssi=-64, mTimestampNanos=61272522487278}
Czy ktoś widział ScanFilters pracować na Androida M?
Potrzebujesz obu - NETWORK_PROVIDER i GPS_PROVIDER? Lub po prostu NETWORK_PROVIDER. Więcej informacji tutaj: https://developer.android.com/guide/topics/connectivity/bluetooth-le.html –