Loading framework/api/current.txt +49 −1 Original line number Diff line number Diff line Loading @@ -1274,7 +1274,8 @@ package android.bluetooth.le { public static final class ScanFilter.Builder { ctor public ScanFilter.Builder(); method public android.bluetooth.le.ScanFilter build(); method @NonNull public android.bluetooth.le.ScanFilter.Builder setAdvertisingDataWithType(int, @Nullable byte[], @Nullable byte[]); method @NonNull public android.bluetooth.le.ScanFilter.Builder setAdvertisingDataType(int); method @NonNull public android.bluetooth.le.ScanFilter.Builder setAdvertisingDataTypeWithData(int, @NonNull byte[], @NonNull byte[]); method public android.bluetooth.le.ScanFilter.Builder setDeviceAddress(String); method public android.bluetooth.le.ScanFilter.Builder setDeviceName(String); method public android.bluetooth.le.ScanFilter.Builder setManufacturerData(int, byte[]); Loading @@ -1299,6 +1300,53 @@ package android.bluetooth.le { method @NonNull public java.util.List<android.os.ParcelUuid> getServiceSolicitationUuids(); method public java.util.List<android.os.ParcelUuid> getServiceUuids(); method public int getTxPowerLevel(); field public static final int DATA_TYPE_3D_INFORMATION_DATA = 61; // 0x3d field public static final int DATA_TYPE_ADVERTISING_INTERVAL = 26; // 0x1a field public static final int DATA_TYPE_ADVERTISING_INTERVAL_LONG = 47; // 0x2f field public static final int DATA_TYPE_APPEARANCE = 25; // 0x19 field public static final int DATA_TYPE_BIG_INFO = 44; // 0x2c field public static final int DATA_TYPE_BROADCAST_CODE = 45; // 0x2d field public static final int DATA_TYPE_CHANNEL_MAP_UPDATE_INDICATION = 40; // 0x28 field public static final int DATA_TYPE_CLASS_OF_DEVICE = 13; // 0xd field public static final int DATA_TYPE_DEVICE_ID = 16; // 0x10 field public static final int DATA_TYPE_FLAGS = 1; // 0x1 field public static final int DATA_TYPE_INDOOR_POSITIONING = 37; // 0x25 field public static final int DATA_TYPE_LE_BLUETOOTH_DEVICE_ADDRESS = 27; // 0x1b field public static final int DATA_TYPE_LE_ROLE = 28; // 0x1c field public static final int DATA_TYPE_LE_SECURE_CONNECTIONS_CONFIRMATION_VALUE = 34; // 0x22 field public static final int DATA_TYPE_LE_SECURE_CONNECTIONS_RANDOM_VALUE = 35; // 0x23 field public static final int DATA_TYPE_LE_SUPPORTED_FEATURES = 39; // 0x27 field public static final int DATA_TYPE_LOCAL_NAME_COMPLETE = 9; // 0x9 field public static final int DATA_TYPE_LOCAL_NAME_SHORT = 8; // 0x8 field public static final int DATA_TYPE_MANUFACTURER_SPECIFIC_DATA = 255; // 0xff field public static final int DATA_TYPE_MESH_BEACON = 43; // 0x2b field public static final int DATA_TYPE_MESH_MESSAGE = 42; // 0x2a field public static final int DATA_TYPE_NONE = -1; // 0xffffffff field public static final int DATA_TYPE_PB_ADV = 41; // 0x29 field public static final int DATA_TYPE_PUBLIC_TARGET_ADDRESS = 23; // 0x17 field public static final int DATA_TYPE_RANDOM_TARGET_ADDRESS = 24; // 0x18 field public static final int DATA_TYPE_RESOLVABLE_SET_IDENTIFIER = 46; // 0x2e field public static final int DATA_TYPE_SECURITY_MANAGER_OUT_OF_BAND_FLAGS = 17; // 0x11 field public static final int DATA_TYPE_SERVICE_DATA_128_BIT = 33; // 0x21 field public static final int DATA_TYPE_SERVICE_DATA_16_BIT = 22; // 0x16 field public static final int DATA_TYPE_SERVICE_DATA_32_BIT = 32; // 0x20 field public static final int DATA_TYPE_SERVICE_SOLICITATION_UUIDS_128_BIT = 21; // 0x15 field public static final int DATA_TYPE_SERVICE_SOLICITATION_UUIDS_16_BIT = 20; // 0x14 field public static final int DATA_TYPE_SERVICE_SOLICITATION_UUIDS_32_BIT = 31; // 0x1f field public static final int DATA_TYPE_SERVICE_UUIDS_128_BIT_COMPLETE = 7; // 0x7 field public static final int DATA_TYPE_SERVICE_UUIDS_128_BIT_PARTIAL = 6; // 0x6 field public static final int DATA_TYPE_SERVICE_UUIDS_16_BIT_COMPLETE = 3; // 0x3 field public static final int DATA_TYPE_SERVICE_UUIDS_16_BIT_PARTIAL = 2; // 0x2 field public static final int DATA_TYPE_SERVICE_UUIDS_32_BIT_COMPLETE = 5; // 0x5 field public static final int DATA_TYPE_SERVICE_UUIDS_32_BIT_PARTIAL = 4; // 0x4 field public static final int DATA_TYPE_SIMPLE_PAIRING_HASH_C = 14; // 0xe field public static final int DATA_TYPE_SIMPLE_PAIRING_HASH_C_256 = 29; // 0x1d field public static final int DATA_TYPE_SIMPLE_PAIRING_RANDOMIZER_R = 15; // 0xf field public static final int DATA_TYPE_SIMPLE_PAIRING_RANDOMIZER_R_256 = 30; // 0x1e field public static final int DATA_TYPE_SLAVE_CONNECTION_INTERVAL_RANGE = 18; // 0x12 field public static final int DATA_TYPE_TRANSPORT_DISCOVERY_DATA = 38; // 0x26 field public static final int DATA_TYPE_TX_POWER_LEVEL = 10; // 0xa field public static final int DATA_TYPE_URI = 36; // 0x24 } public final class ScanResult implements android.os.Parcelable { Loading framework/java/android/bluetooth/le/ScanFilter.java +44 −10 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import android.annotation.SystemApi; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothDevice.AddressType; import android.bluetooth.le.ScanRecord.AdvertisingDataType; import android.os.Parcel; import android.os.ParcelUuid; import android.os.Parcelable; Loading @@ -43,6 +44,7 @@ import java.util.UUID; * <li>Mac address of the remote device. * <li>Service data which is the data associated with a service. * <li>Manufacturer specific data which is the data associated with a particular manufacturer. * <li>Advertising data type and corresponding data. * * @see ScanResult * @see BluetoothLeScanner Loading Loading @@ -83,7 +85,7 @@ public final class ScanFilter implements Parcelable { @Nullable private final byte[] mManufacturerDataMask; private int mAdvertisingDataType = -1; private int mAdvertisingDataType = ScanRecord.DATA_TYPE_NONE; @Nullable private final byte[] mAdvertisingData; @Nullable Loading Loading @@ -303,7 +305,7 @@ public final class ScanFilter implements Parcelable { advertisingDataMask = new byte[advertisingDataMaskLength]; in.readByteArray(advertisingDataMask); } builder.setAdvertisingDataWithType(advertisingDataType, advertisingData, builder.setAdvertisingDataTypeWithData(advertisingDataType, advertisingData, advertisingDataMask); } Loading Loading @@ -403,16 +405,26 @@ public final class ScanFilter implements Parcelable { } /** * Returns the advertising data type. -1 if the type is not set. * Returns the advertising data type of this filter. * Returns {@link ScanRecord#DATA_TYPE_NONE} if the type is not set. * The values of advertising data type are defined in the Bluetooth Generic Access Profile * (https://www.bluetooth.com/specifications/assigned-numbers/) */ @AdvertisingDataType public int getAdvertisingDataType() { return mAdvertisingDataType; } /** * Returns the advertising data of this filter. */ public @Nullable byte[] getAdvertisingData() { return mAdvertisingData; } /** * Returns the advertising data mask of this filter. */ public @Nullable byte[] getAdvertisingDataMask() { return mAdvertisingDataMask; } Loading Loading @@ -477,7 +489,7 @@ public final class ScanFilter implements Parcelable { } // Advertising data type match if (mAdvertisingDataType >= 0) { if (mAdvertisingDataType > 0) { byte[] advertisingData = scanRecord.getAdvertisingDataMap().get(mAdvertisingDataType); if (advertisingData == null || !matchesPartialData(mAdvertisingData, mAdvertisingDataMask, advertisingData)) { Loading Loading @@ -665,7 +677,7 @@ public final class ScanFilter implements Parcelable { private byte[] mManufacturerData; private byte[] mManufacturerDataMask; private int mAdvertisingDataType = -1; private int mAdvertisingDataType = ScanRecord.DATA_TYPE_NONE; private byte[] mAdvertisingData; private byte[] mAdvertisingDataMask; Loading Loading @@ -978,15 +990,19 @@ public final class ScanFilter implements Parcelable { * For any bit in the mask, set it the 1 if it needs to match the one in * advertising data, otherwise set it to 0. * <p> * The values of {@code advertisingDataType} are assigned by Bluetooth SIG. For more * details refer to Bluetooth Generic Access Profile. * (https://www.bluetooth.com/specifications/assigned-numbers/) * The {@code advertisingDataMask} must have the same length of {@code advertisingData}. * * @throws IllegalArgumentException If the {@code advertisingDataType} is invalid, {@code * advertisingData} is null while {@code advertisingDataMask} is not, or {@code * advertisingData} or {@code advertisingDataMask} is null or {@code * advertisingData} and {@code advertisingDataMask} have different length. */ public @NonNull Builder setAdvertisingDataWithType(int advertisingDataType, @Nullable byte[] advertisingData, @Nullable byte[] advertisingDataMask) { if (advertisingDataType < -1) { public @NonNull Builder setAdvertisingDataTypeWithData( @AdvertisingDataType int advertisingDataType, @NonNull byte[] advertisingData, @NonNull byte[] advertisingDataMask) { if (advertisingDataType < 0) { throw new IllegalArgumentException("invalid advertising data type"); } if (mAdvertisingDataMask != null) { Loading @@ -1007,6 +1023,24 @@ public final class ScanFilter implements Parcelable { return this; } /** * Set filter on advertising data with specific advertising data type. * <p> * The values of {@code advertisingDataType} are assigned by Bluetooth SIG. For more * details refer to Bluetooth Generic Access Profile. * (https://www.bluetooth.com/specifications/assigned-numbers/) * @throws IllegalArgumentException If the {@code advertisingDataType} is invalid */ public @NonNull Builder setAdvertisingDataType( @AdvertisingDataType int advertisingDataType) { if (advertisingDataType < 0) { throw new IllegalArgumentException("invalid advertising data type"); } mAdvertisingDataType = advertisingDataType; return this; } /** * Build {@link ScanFilter}. * Loading framework/java/android/bluetooth/le/ScanRecord.java +105 −18 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package android.bluetooth.le; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SuppressLint; Loading @@ -26,6 +27,8 @@ import android.util.ArrayMap; import android.util.Log; import android.util.SparseArray; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; Loading @@ -41,25 +44,107 @@ public final class ScanRecord { private static final String TAG = "ScanRecord"; /** @hide */ @IntDef(prefix = "DATA_TYPE_", value = { DATA_TYPE_FLAGS, DATA_TYPE_SERVICE_UUIDS_16_BIT_PARTIAL, DATA_TYPE_SERVICE_UUIDS_16_BIT_COMPLETE, DATA_TYPE_SERVICE_UUIDS_32_BIT_PARTIAL, DATA_TYPE_SERVICE_UUIDS_32_BIT_COMPLETE, DATA_TYPE_SERVICE_UUIDS_128_BIT_PARTIAL, DATA_TYPE_SERVICE_UUIDS_128_BIT_COMPLETE, DATA_TYPE_LOCAL_NAME_SHORT, DATA_TYPE_LOCAL_NAME_COMPLETE, DATA_TYPE_TX_POWER_LEVEL, DATA_TYPE_CLASS_OF_DEVICE, DATA_TYPE_SIMPLE_PAIRING_HASH_C, DATA_TYPE_SIMPLE_PAIRING_RANDOMIZER_R, DATA_TYPE_DEVICE_ID, DATA_TYPE_SECURITY_MANAGER_OUT_OF_BAND_FLAGS, DATA_TYPE_SLAVE_CONNECTION_INTERVAL_RANGE, DATA_TYPE_SERVICE_SOLICITATION_UUIDS_16_BIT, DATA_TYPE_SERVICE_SOLICITATION_UUIDS_128_BIT, DATA_TYPE_SERVICE_DATA_16_BIT, DATA_TYPE_PUBLIC_TARGET_ADDRESS, DATA_TYPE_RANDOM_TARGET_ADDRESS, DATA_TYPE_APPEARANCE, DATA_TYPE_ADVERTISING_INTERVAL, DATA_TYPE_LE_BLUETOOTH_DEVICE_ADDRESS, DATA_TYPE_LE_ROLE, DATA_TYPE_SIMPLE_PAIRING_HASH_C_256, DATA_TYPE_SIMPLE_PAIRING_RANDOMIZER_R_256, DATA_TYPE_SERVICE_SOLICITATION_UUIDS_32_BIT, DATA_TYPE_SERVICE_DATA_32_BIT, DATA_TYPE_SERVICE_DATA_128_BIT, DATA_TYPE_LE_SECURE_CONNECTIONS_CONFIRMATION_VALUE, DATA_TYPE_LE_SECURE_CONNECTIONS_RANDOM_VALUE, DATA_TYPE_URI, DATA_TYPE_INDOOR_POSITIONING, DATA_TYPE_TRANSPORT_DISCOVERY_DATA, DATA_TYPE_LE_SUPPORTED_FEATURES, DATA_TYPE_CHANNEL_MAP_UPDATE_INDICATION, DATA_TYPE_PB_ADV, DATA_TYPE_MESH_MESSAGE, DATA_TYPE_MESH_BEACON, DATA_TYPE_BIG_INFO, DATA_TYPE_BROADCAST_CODE, DATA_TYPE_RESOLVABLE_SET_IDENTIFIER, DATA_TYPE_ADVERTISING_INTERVAL_LONG, DATA_TYPE_3D_INFORMATION_DATA, DATA_TYPE_MANUFACTURER_SPECIFIC_DATA, }) @Retention(RetentionPolicy.SOURCE) public @interface AdvertisingDataType {} // The following data type values are assigned by Bluetooth SIG. // For more details refer to Bluetooth 4.1 specification, Volume 3, Part C, Section 18. private static final int DATA_TYPE_FLAGS = 0x01; private static final int DATA_TYPE_SERVICE_UUIDS_16_BIT_PARTIAL = 0x02; private static final int DATA_TYPE_SERVICE_UUIDS_16_BIT_COMPLETE = 0x03; private static final int DATA_TYPE_SERVICE_UUIDS_32_BIT_PARTIAL = 0x04; private static final int DATA_TYPE_SERVICE_UUIDS_32_BIT_COMPLETE = 0x05; private static final int DATA_TYPE_SERVICE_UUIDS_128_BIT_PARTIAL = 0x06; private static final int DATA_TYPE_SERVICE_UUIDS_128_BIT_COMPLETE = 0x07; private static final int DATA_TYPE_LOCAL_NAME_SHORT = 0x08; private static final int DATA_TYPE_LOCAL_NAME_COMPLETE = 0x09; private static final int DATA_TYPE_TX_POWER_LEVEL = 0x0A; private static final int DATA_TYPE_SERVICE_DATA_16_BIT = 0x16; private static final int DATA_TYPE_SERVICE_DATA_32_BIT = 0x20; private static final int DATA_TYPE_SERVICE_DATA_128_BIT = 0x21; private static final int DATA_TYPE_SERVICE_SOLICITATION_UUIDS_16_BIT = 0x14; private static final int DATA_TYPE_SERVICE_SOLICITATION_UUIDS_32_BIT = 0x1F; private static final int DATA_TYPE_SERVICE_SOLICITATION_UUIDS_128_BIT = 0x15; private static final int DATA_TYPE_MANUFACTURER_SPECIFIC_DATA = 0xFF; // For more details refer to Bluetooth Generic Access Profile. public static final int DATA_TYPE_NONE = -1; public static final int DATA_TYPE_FLAGS = 0x01; public static final int DATA_TYPE_SERVICE_UUIDS_16_BIT_PARTIAL = 0x02; public static final int DATA_TYPE_SERVICE_UUIDS_16_BIT_COMPLETE = 0x03; public static final int DATA_TYPE_SERVICE_UUIDS_32_BIT_PARTIAL = 0x04; public static final int DATA_TYPE_SERVICE_UUIDS_32_BIT_COMPLETE = 0x05; public static final int DATA_TYPE_SERVICE_UUIDS_128_BIT_PARTIAL = 0x06; public static final int DATA_TYPE_SERVICE_UUIDS_128_BIT_COMPLETE = 0x07; public static final int DATA_TYPE_LOCAL_NAME_SHORT = 0x08; public static final int DATA_TYPE_LOCAL_NAME_COMPLETE = 0x09; public static final int DATA_TYPE_TX_POWER_LEVEL = 0x0A; public static final int DATA_TYPE_CLASS_OF_DEVICE = 0x0D; public static final int DATA_TYPE_SIMPLE_PAIRING_HASH_C = 0x0E; public static final int DATA_TYPE_SIMPLE_PAIRING_RANDOMIZER_R = 0x0F; public static final int DATA_TYPE_DEVICE_ID = 0x10; public static final int DATA_TYPE_SECURITY_MANAGER_OUT_OF_BAND_FLAGS = 0x11; public static final int DATA_TYPE_SLAVE_CONNECTION_INTERVAL_RANGE = 0x12; public static final int DATA_TYPE_SERVICE_SOLICITATION_UUIDS_16_BIT = 0x14; public static final int DATA_TYPE_SERVICE_SOLICITATION_UUIDS_128_BIT = 0x15; public static final int DATA_TYPE_SERVICE_DATA_16_BIT = 0x16; public static final int DATA_TYPE_PUBLIC_TARGET_ADDRESS = 0x17; public static final int DATA_TYPE_RANDOM_TARGET_ADDRESS = 0x18; public static final int DATA_TYPE_APPEARANCE = 0x19; public static final int DATA_TYPE_ADVERTISING_INTERVAL = 0x1A; public static final int DATA_TYPE_LE_BLUETOOTH_DEVICE_ADDRESS = 0x1B; public static final int DATA_TYPE_LE_ROLE = 0x1C; public static final int DATA_TYPE_SIMPLE_PAIRING_HASH_C_256 = 0x1D; public static final int DATA_TYPE_SIMPLE_PAIRING_RANDOMIZER_R_256 = 0x1E; public static final int DATA_TYPE_SERVICE_SOLICITATION_UUIDS_32_BIT = 0x1F; public static final int DATA_TYPE_SERVICE_DATA_32_BIT = 0x20; public static final int DATA_TYPE_SERVICE_DATA_128_BIT = 0x21; public static final int DATA_TYPE_LE_SECURE_CONNECTIONS_CONFIRMATION_VALUE = 0x22; public static final int DATA_TYPE_LE_SECURE_CONNECTIONS_RANDOM_VALUE = 0x23; public static final int DATA_TYPE_URI = 0x24; public static final int DATA_TYPE_INDOOR_POSITIONING = 0x25; public static final int DATA_TYPE_TRANSPORT_DISCOVERY_DATA = 0x26; public static final int DATA_TYPE_LE_SUPPORTED_FEATURES = 0x27; public static final int DATA_TYPE_CHANNEL_MAP_UPDATE_INDICATION = 0x28; public static final int DATA_TYPE_PB_ADV = 0x29; public static final int DATA_TYPE_MESH_MESSAGE = 0x2A; public static final int DATA_TYPE_MESH_BEACON = 0x2B; public static final int DATA_TYPE_BIG_INFO = 0x2C; public static final int DATA_TYPE_BROADCAST_CODE = 0x2D; public static final int DATA_TYPE_RESOLVABLE_SET_IDENTIFIER = 0x2E; public static final int DATA_TYPE_ADVERTISING_INTERVAL_LONG = 0x2F; public static final int DATA_TYPE_3D_INFORMATION_DATA = 0x3D; public static final int DATA_TYPE_MANUFACTURER_SPECIFIC_DATA = 0xFF; // Flags of the advertising data. private final int mAdvertiseFlags; Loading Loading @@ -170,6 +255,8 @@ public final class ScanRecord { /** * Returns a map of advertising data type and its corresponding advertising data. * The values of advertising data type are defined in the Bluetooth Generic Access Profile * (https://www.bluetooth.com/specifications/assigned-numbers/) */ public @NonNull Map<Integer, byte[]> getAdvertisingDataMap() { return mAdvertisingDataMap; Loading Loading
framework/api/current.txt +49 −1 Original line number Diff line number Diff line Loading @@ -1274,7 +1274,8 @@ package android.bluetooth.le { public static final class ScanFilter.Builder { ctor public ScanFilter.Builder(); method public android.bluetooth.le.ScanFilter build(); method @NonNull public android.bluetooth.le.ScanFilter.Builder setAdvertisingDataWithType(int, @Nullable byte[], @Nullable byte[]); method @NonNull public android.bluetooth.le.ScanFilter.Builder setAdvertisingDataType(int); method @NonNull public android.bluetooth.le.ScanFilter.Builder setAdvertisingDataTypeWithData(int, @NonNull byte[], @NonNull byte[]); method public android.bluetooth.le.ScanFilter.Builder setDeviceAddress(String); method public android.bluetooth.le.ScanFilter.Builder setDeviceName(String); method public android.bluetooth.le.ScanFilter.Builder setManufacturerData(int, byte[]); Loading @@ -1299,6 +1300,53 @@ package android.bluetooth.le { method @NonNull public java.util.List<android.os.ParcelUuid> getServiceSolicitationUuids(); method public java.util.List<android.os.ParcelUuid> getServiceUuids(); method public int getTxPowerLevel(); field public static final int DATA_TYPE_3D_INFORMATION_DATA = 61; // 0x3d field public static final int DATA_TYPE_ADVERTISING_INTERVAL = 26; // 0x1a field public static final int DATA_TYPE_ADVERTISING_INTERVAL_LONG = 47; // 0x2f field public static final int DATA_TYPE_APPEARANCE = 25; // 0x19 field public static final int DATA_TYPE_BIG_INFO = 44; // 0x2c field public static final int DATA_TYPE_BROADCAST_CODE = 45; // 0x2d field public static final int DATA_TYPE_CHANNEL_MAP_UPDATE_INDICATION = 40; // 0x28 field public static final int DATA_TYPE_CLASS_OF_DEVICE = 13; // 0xd field public static final int DATA_TYPE_DEVICE_ID = 16; // 0x10 field public static final int DATA_TYPE_FLAGS = 1; // 0x1 field public static final int DATA_TYPE_INDOOR_POSITIONING = 37; // 0x25 field public static final int DATA_TYPE_LE_BLUETOOTH_DEVICE_ADDRESS = 27; // 0x1b field public static final int DATA_TYPE_LE_ROLE = 28; // 0x1c field public static final int DATA_TYPE_LE_SECURE_CONNECTIONS_CONFIRMATION_VALUE = 34; // 0x22 field public static final int DATA_TYPE_LE_SECURE_CONNECTIONS_RANDOM_VALUE = 35; // 0x23 field public static final int DATA_TYPE_LE_SUPPORTED_FEATURES = 39; // 0x27 field public static final int DATA_TYPE_LOCAL_NAME_COMPLETE = 9; // 0x9 field public static final int DATA_TYPE_LOCAL_NAME_SHORT = 8; // 0x8 field public static final int DATA_TYPE_MANUFACTURER_SPECIFIC_DATA = 255; // 0xff field public static final int DATA_TYPE_MESH_BEACON = 43; // 0x2b field public static final int DATA_TYPE_MESH_MESSAGE = 42; // 0x2a field public static final int DATA_TYPE_NONE = -1; // 0xffffffff field public static final int DATA_TYPE_PB_ADV = 41; // 0x29 field public static final int DATA_TYPE_PUBLIC_TARGET_ADDRESS = 23; // 0x17 field public static final int DATA_TYPE_RANDOM_TARGET_ADDRESS = 24; // 0x18 field public static final int DATA_TYPE_RESOLVABLE_SET_IDENTIFIER = 46; // 0x2e field public static final int DATA_TYPE_SECURITY_MANAGER_OUT_OF_BAND_FLAGS = 17; // 0x11 field public static final int DATA_TYPE_SERVICE_DATA_128_BIT = 33; // 0x21 field public static final int DATA_TYPE_SERVICE_DATA_16_BIT = 22; // 0x16 field public static final int DATA_TYPE_SERVICE_DATA_32_BIT = 32; // 0x20 field public static final int DATA_TYPE_SERVICE_SOLICITATION_UUIDS_128_BIT = 21; // 0x15 field public static final int DATA_TYPE_SERVICE_SOLICITATION_UUIDS_16_BIT = 20; // 0x14 field public static final int DATA_TYPE_SERVICE_SOLICITATION_UUIDS_32_BIT = 31; // 0x1f field public static final int DATA_TYPE_SERVICE_UUIDS_128_BIT_COMPLETE = 7; // 0x7 field public static final int DATA_TYPE_SERVICE_UUIDS_128_BIT_PARTIAL = 6; // 0x6 field public static final int DATA_TYPE_SERVICE_UUIDS_16_BIT_COMPLETE = 3; // 0x3 field public static final int DATA_TYPE_SERVICE_UUIDS_16_BIT_PARTIAL = 2; // 0x2 field public static final int DATA_TYPE_SERVICE_UUIDS_32_BIT_COMPLETE = 5; // 0x5 field public static final int DATA_TYPE_SERVICE_UUIDS_32_BIT_PARTIAL = 4; // 0x4 field public static final int DATA_TYPE_SIMPLE_PAIRING_HASH_C = 14; // 0xe field public static final int DATA_TYPE_SIMPLE_PAIRING_HASH_C_256 = 29; // 0x1d field public static final int DATA_TYPE_SIMPLE_PAIRING_RANDOMIZER_R = 15; // 0xf field public static final int DATA_TYPE_SIMPLE_PAIRING_RANDOMIZER_R_256 = 30; // 0x1e field public static final int DATA_TYPE_SLAVE_CONNECTION_INTERVAL_RANGE = 18; // 0x12 field public static final int DATA_TYPE_TRANSPORT_DISCOVERY_DATA = 38; // 0x26 field public static final int DATA_TYPE_TX_POWER_LEVEL = 10; // 0xa field public static final int DATA_TYPE_URI = 36; // 0x24 } public final class ScanResult implements android.os.Parcelable { Loading
framework/java/android/bluetooth/le/ScanFilter.java +44 −10 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import android.annotation.SystemApi; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothDevice.AddressType; import android.bluetooth.le.ScanRecord.AdvertisingDataType; import android.os.Parcel; import android.os.ParcelUuid; import android.os.Parcelable; Loading @@ -43,6 +44,7 @@ import java.util.UUID; * <li>Mac address of the remote device. * <li>Service data which is the data associated with a service. * <li>Manufacturer specific data which is the data associated with a particular manufacturer. * <li>Advertising data type and corresponding data. * * @see ScanResult * @see BluetoothLeScanner Loading Loading @@ -83,7 +85,7 @@ public final class ScanFilter implements Parcelable { @Nullable private final byte[] mManufacturerDataMask; private int mAdvertisingDataType = -1; private int mAdvertisingDataType = ScanRecord.DATA_TYPE_NONE; @Nullable private final byte[] mAdvertisingData; @Nullable Loading Loading @@ -303,7 +305,7 @@ public final class ScanFilter implements Parcelable { advertisingDataMask = new byte[advertisingDataMaskLength]; in.readByteArray(advertisingDataMask); } builder.setAdvertisingDataWithType(advertisingDataType, advertisingData, builder.setAdvertisingDataTypeWithData(advertisingDataType, advertisingData, advertisingDataMask); } Loading Loading @@ -403,16 +405,26 @@ public final class ScanFilter implements Parcelable { } /** * Returns the advertising data type. -1 if the type is not set. * Returns the advertising data type of this filter. * Returns {@link ScanRecord#DATA_TYPE_NONE} if the type is not set. * The values of advertising data type are defined in the Bluetooth Generic Access Profile * (https://www.bluetooth.com/specifications/assigned-numbers/) */ @AdvertisingDataType public int getAdvertisingDataType() { return mAdvertisingDataType; } /** * Returns the advertising data of this filter. */ public @Nullable byte[] getAdvertisingData() { return mAdvertisingData; } /** * Returns the advertising data mask of this filter. */ public @Nullable byte[] getAdvertisingDataMask() { return mAdvertisingDataMask; } Loading Loading @@ -477,7 +489,7 @@ public final class ScanFilter implements Parcelable { } // Advertising data type match if (mAdvertisingDataType >= 0) { if (mAdvertisingDataType > 0) { byte[] advertisingData = scanRecord.getAdvertisingDataMap().get(mAdvertisingDataType); if (advertisingData == null || !matchesPartialData(mAdvertisingData, mAdvertisingDataMask, advertisingData)) { Loading Loading @@ -665,7 +677,7 @@ public final class ScanFilter implements Parcelable { private byte[] mManufacturerData; private byte[] mManufacturerDataMask; private int mAdvertisingDataType = -1; private int mAdvertisingDataType = ScanRecord.DATA_TYPE_NONE; private byte[] mAdvertisingData; private byte[] mAdvertisingDataMask; Loading Loading @@ -978,15 +990,19 @@ public final class ScanFilter implements Parcelable { * For any bit in the mask, set it the 1 if it needs to match the one in * advertising data, otherwise set it to 0. * <p> * The values of {@code advertisingDataType} are assigned by Bluetooth SIG. For more * details refer to Bluetooth Generic Access Profile. * (https://www.bluetooth.com/specifications/assigned-numbers/) * The {@code advertisingDataMask} must have the same length of {@code advertisingData}. * * @throws IllegalArgumentException If the {@code advertisingDataType} is invalid, {@code * advertisingData} is null while {@code advertisingDataMask} is not, or {@code * advertisingData} or {@code advertisingDataMask} is null or {@code * advertisingData} and {@code advertisingDataMask} have different length. */ public @NonNull Builder setAdvertisingDataWithType(int advertisingDataType, @Nullable byte[] advertisingData, @Nullable byte[] advertisingDataMask) { if (advertisingDataType < -1) { public @NonNull Builder setAdvertisingDataTypeWithData( @AdvertisingDataType int advertisingDataType, @NonNull byte[] advertisingData, @NonNull byte[] advertisingDataMask) { if (advertisingDataType < 0) { throw new IllegalArgumentException("invalid advertising data type"); } if (mAdvertisingDataMask != null) { Loading @@ -1007,6 +1023,24 @@ public final class ScanFilter implements Parcelable { return this; } /** * Set filter on advertising data with specific advertising data type. * <p> * The values of {@code advertisingDataType} are assigned by Bluetooth SIG. For more * details refer to Bluetooth Generic Access Profile. * (https://www.bluetooth.com/specifications/assigned-numbers/) * @throws IllegalArgumentException If the {@code advertisingDataType} is invalid */ public @NonNull Builder setAdvertisingDataType( @AdvertisingDataType int advertisingDataType) { if (advertisingDataType < 0) { throw new IllegalArgumentException("invalid advertising data type"); } mAdvertisingDataType = advertisingDataType; return this; } /** * Build {@link ScanFilter}. * Loading
framework/java/android/bluetooth/le/ScanRecord.java +105 −18 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package android.bluetooth.le; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SuppressLint; Loading @@ -26,6 +27,8 @@ import android.util.ArrayMap; import android.util.Log; import android.util.SparseArray; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; Loading @@ -41,25 +44,107 @@ public final class ScanRecord { private static final String TAG = "ScanRecord"; /** @hide */ @IntDef(prefix = "DATA_TYPE_", value = { DATA_TYPE_FLAGS, DATA_TYPE_SERVICE_UUIDS_16_BIT_PARTIAL, DATA_TYPE_SERVICE_UUIDS_16_BIT_COMPLETE, DATA_TYPE_SERVICE_UUIDS_32_BIT_PARTIAL, DATA_TYPE_SERVICE_UUIDS_32_BIT_COMPLETE, DATA_TYPE_SERVICE_UUIDS_128_BIT_PARTIAL, DATA_TYPE_SERVICE_UUIDS_128_BIT_COMPLETE, DATA_TYPE_LOCAL_NAME_SHORT, DATA_TYPE_LOCAL_NAME_COMPLETE, DATA_TYPE_TX_POWER_LEVEL, DATA_TYPE_CLASS_OF_DEVICE, DATA_TYPE_SIMPLE_PAIRING_HASH_C, DATA_TYPE_SIMPLE_PAIRING_RANDOMIZER_R, DATA_TYPE_DEVICE_ID, DATA_TYPE_SECURITY_MANAGER_OUT_OF_BAND_FLAGS, DATA_TYPE_SLAVE_CONNECTION_INTERVAL_RANGE, DATA_TYPE_SERVICE_SOLICITATION_UUIDS_16_BIT, DATA_TYPE_SERVICE_SOLICITATION_UUIDS_128_BIT, DATA_TYPE_SERVICE_DATA_16_BIT, DATA_TYPE_PUBLIC_TARGET_ADDRESS, DATA_TYPE_RANDOM_TARGET_ADDRESS, DATA_TYPE_APPEARANCE, DATA_TYPE_ADVERTISING_INTERVAL, DATA_TYPE_LE_BLUETOOTH_DEVICE_ADDRESS, DATA_TYPE_LE_ROLE, DATA_TYPE_SIMPLE_PAIRING_HASH_C_256, DATA_TYPE_SIMPLE_PAIRING_RANDOMIZER_R_256, DATA_TYPE_SERVICE_SOLICITATION_UUIDS_32_BIT, DATA_TYPE_SERVICE_DATA_32_BIT, DATA_TYPE_SERVICE_DATA_128_BIT, DATA_TYPE_LE_SECURE_CONNECTIONS_CONFIRMATION_VALUE, DATA_TYPE_LE_SECURE_CONNECTIONS_RANDOM_VALUE, DATA_TYPE_URI, DATA_TYPE_INDOOR_POSITIONING, DATA_TYPE_TRANSPORT_DISCOVERY_DATA, DATA_TYPE_LE_SUPPORTED_FEATURES, DATA_TYPE_CHANNEL_MAP_UPDATE_INDICATION, DATA_TYPE_PB_ADV, DATA_TYPE_MESH_MESSAGE, DATA_TYPE_MESH_BEACON, DATA_TYPE_BIG_INFO, DATA_TYPE_BROADCAST_CODE, DATA_TYPE_RESOLVABLE_SET_IDENTIFIER, DATA_TYPE_ADVERTISING_INTERVAL_LONG, DATA_TYPE_3D_INFORMATION_DATA, DATA_TYPE_MANUFACTURER_SPECIFIC_DATA, }) @Retention(RetentionPolicy.SOURCE) public @interface AdvertisingDataType {} // The following data type values are assigned by Bluetooth SIG. // For more details refer to Bluetooth 4.1 specification, Volume 3, Part C, Section 18. private static final int DATA_TYPE_FLAGS = 0x01; private static final int DATA_TYPE_SERVICE_UUIDS_16_BIT_PARTIAL = 0x02; private static final int DATA_TYPE_SERVICE_UUIDS_16_BIT_COMPLETE = 0x03; private static final int DATA_TYPE_SERVICE_UUIDS_32_BIT_PARTIAL = 0x04; private static final int DATA_TYPE_SERVICE_UUIDS_32_BIT_COMPLETE = 0x05; private static final int DATA_TYPE_SERVICE_UUIDS_128_BIT_PARTIAL = 0x06; private static final int DATA_TYPE_SERVICE_UUIDS_128_BIT_COMPLETE = 0x07; private static final int DATA_TYPE_LOCAL_NAME_SHORT = 0x08; private static final int DATA_TYPE_LOCAL_NAME_COMPLETE = 0x09; private static final int DATA_TYPE_TX_POWER_LEVEL = 0x0A; private static final int DATA_TYPE_SERVICE_DATA_16_BIT = 0x16; private static final int DATA_TYPE_SERVICE_DATA_32_BIT = 0x20; private static final int DATA_TYPE_SERVICE_DATA_128_BIT = 0x21; private static final int DATA_TYPE_SERVICE_SOLICITATION_UUIDS_16_BIT = 0x14; private static final int DATA_TYPE_SERVICE_SOLICITATION_UUIDS_32_BIT = 0x1F; private static final int DATA_TYPE_SERVICE_SOLICITATION_UUIDS_128_BIT = 0x15; private static final int DATA_TYPE_MANUFACTURER_SPECIFIC_DATA = 0xFF; // For more details refer to Bluetooth Generic Access Profile. public static final int DATA_TYPE_NONE = -1; public static final int DATA_TYPE_FLAGS = 0x01; public static final int DATA_TYPE_SERVICE_UUIDS_16_BIT_PARTIAL = 0x02; public static final int DATA_TYPE_SERVICE_UUIDS_16_BIT_COMPLETE = 0x03; public static final int DATA_TYPE_SERVICE_UUIDS_32_BIT_PARTIAL = 0x04; public static final int DATA_TYPE_SERVICE_UUIDS_32_BIT_COMPLETE = 0x05; public static final int DATA_TYPE_SERVICE_UUIDS_128_BIT_PARTIAL = 0x06; public static final int DATA_TYPE_SERVICE_UUIDS_128_BIT_COMPLETE = 0x07; public static final int DATA_TYPE_LOCAL_NAME_SHORT = 0x08; public static final int DATA_TYPE_LOCAL_NAME_COMPLETE = 0x09; public static final int DATA_TYPE_TX_POWER_LEVEL = 0x0A; public static final int DATA_TYPE_CLASS_OF_DEVICE = 0x0D; public static final int DATA_TYPE_SIMPLE_PAIRING_HASH_C = 0x0E; public static final int DATA_TYPE_SIMPLE_PAIRING_RANDOMIZER_R = 0x0F; public static final int DATA_TYPE_DEVICE_ID = 0x10; public static final int DATA_TYPE_SECURITY_MANAGER_OUT_OF_BAND_FLAGS = 0x11; public static final int DATA_TYPE_SLAVE_CONNECTION_INTERVAL_RANGE = 0x12; public static final int DATA_TYPE_SERVICE_SOLICITATION_UUIDS_16_BIT = 0x14; public static final int DATA_TYPE_SERVICE_SOLICITATION_UUIDS_128_BIT = 0x15; public static final int DATA_TYPE_SERVICE_DATA_16_BIT = 0x16; public static final int DATA_TYPE_PUBLIC_TARGET_ADDRESS = 0x17; public static final int DATA_TYPE_RANDOM_TARGET_ADDRESS = 0x18; public static final int DATA_TYPE_APPEARANCE = 0x19; public static final int DATA_TYPE_ADVERTISING_INTERVAL = 0x1A; public static final int DATA_TYPE_LE_BLUETOOTH_DEVICE_ADDRESS = 0x1B; public static final int DATA_TYPE_LE_ROLE = 0x1C; public static final int DATA_TYPE_SIMPLE_PAIRING_HASH_C_256 = 0x1D; public static final int DATA_TYPE_SIMPLE_PAIRING_RANDOMIZER_R_256 = 0x1E; public static final int DATA_TYPE_SERVICE_SOLICITATION_UUIDS_32_BIT = 0x1F; public static final int DATA_TYPE_SERVICE_DATA_32_BIT = 0x20; public static final int DATA_TYPE_SERVICE_DATA_128_BIT = 0x21; public static final int DATA_TYPE_LE_SECURE_CONNECTIONS_CONFIRMATION_VALUE = 0x22; public static final int DATA_TYPE_LE_SECURE_CONNECTIONS_RANDOM_VALUE = 0x23; public static final int DATA_TYPE_URI = 0x24; public static final int DATA_TYPE_INDOOR_POSITIONING = 0x25; public static final int DATA_TYPE_TRANSPORT_DISCOVERY_DATA = 0x26; public static final int DATA_TYPE_LE_SUPPORTED_FEATURES = 0x27; public static final int DATA_TYPE_CHANNEL_MAP_UPDATE_INDICATION = 0x28; public static final int DATA_TYPE_PB_ADV = 0x29; public static final int DATA_TYPE_MESH_MESSAGE = 0x2A; public static final int DATA_TYPE_MESH_BEACON = 0x2B; public static final int DATA_TYPE_BIG_INFO = 0x2C; public static final int DATA_TYPE_BROADCAST_CODE = 0x2D; public static final int DATA_TYPE_RESOLVABLE_SET_IDENTIFIER = 0x2E; public static final int DATA_TYPE_ADVERTISING_INTERVAL_LONG = 0x2F; public static final int DATA_TYPE_3D_INFORMATION_DATA = 0x3D; public static final int DATA_TYPE_MANUFACTURER_SPECIFIC_DATA = 0xFF; // Flags of the advertising data. private final int mAdvertiseFlags; Loading Loading @@ -170,6 +255,8 @@ public final class ScanRecord { /** * Returns a map of advertising data type and its corresponding advertising data. * The values of advertising data type are defined in the Bluetooth Generic Access Profile * (https://www.bluetooth.com/specifications/assigned-numbers/) */ public @NonNull Map<Integer, byte[]> getAdvertisingDataMap() { return mAdvertisingDataMap; Loading