Loading core/api/system-current.txt +19 −0 Original line number Diff line number Diff line Loading @@ -2264,6 +2264,25 @@ package android.bluetooth { package android.bluetooth.le { public final class AdvertiseSettings implements android.os.Parcelable { method public int getOwnAddressType(); } public static final class AdvertiseSettings.Builder { method @NonNull public android.bluetooth.le.AdvertiseSettings.Builder setOwnAddressType(int); } public final class AdvertisingSetParameters implements android.os.Parcelable { method public int getOwnAddressType(); field public static final int ADDRESS_TYPE_DEFAULT = -1; // 0xffffffff field public static final int ADDRESS_TYPE_PUBLIC = 0; // 0x0 field public static final int ADDRESS_TYPE_RANDOM = 1; // 0x1 } public static final class AdvertisingSetParameters.Builder { method @NonNull public android.bluetooth.le.AdvertisingSetParameters.Builder setOwnAddressType(int); } public final class BluetoothLeScanner { method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_SCAN, android.Manifest.permission.UPDATE_DEVICE_STATS}) public void startScanFromSource(android.os.WorkSource, android.bluetooth.le.ScanCallback); method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_SCAN, android.Manifest.permission.UPDATE_DEVICE_STATS}) public void startScanFromSource(java.util.List<android.bluetooth.le.ScanFilter>, android.bluetooth.le.ScanSettings, android.os.WorkSource, android.bluetooth.le.ScanCallback); core/java/android/bluetooth/le/AdvertiseSettings.java +45 −3 Original line number Diff line number Diff line Loading @@ -16,6 +16,9 @@ package android.bluetooth.le; import android.annotation.NonNull; import android.annotation.SystemApi; import android.bluetooth.le.AdvertisingSetParameters.AddressTypeStatus; import android.os.Parcel; import android.os.Parcelable; Loading Loading @@ -70,17 +73,21 @@ public final class AdvertiseSettings implements Parcelable { */ private static final int LIMITED_ADVERTISING_MAX_MILLIS = 180 * 1000; private final int mAdvertiseMode; private final int mAdvertiseTxPowerLevel; private final int mAdvertiseTimeoutMillis; private final boolean mAdvertiseConnectable; private final int mOwnAddressType; private AdvertiseSettings(int advertiseMode, int advertiseTxPowerLevel, boolean advertiseConnectable, int advertiseTimeout) { boolean advertiseConnectable, int advertiseTimeout, @AddressTypeStatus int ownAddressType) { mAdvertiseMode = advertiseMode; mAdvertiseTxPowerLevel = advertiseTxPowerLevel; mAdvertiseConnectable = advertiseConnectable; mAdvertiseTimeoutMillis = advertiseTimeout; mOwnAddressType = ownAddressType; } private AdvertiseSettings(Parcel in) { Loading @@ -88,6 +95,7 @@ public final class AdvertiseSettings implements Parcelable { mAdvertiseTxPowerLevel = in.readInt(); mAdvertiseConnectable = in.readInt() != 0; mAdvertiseTimeoutMillis = in.readInt(); mOwnAddressType = in.readInt(); } /** Loading Loading @@ -118,12 +126,23 @@ public final class AdvertiseSettings implements Parcelable { return mAdvertiseTimeoutMillis; } /** * @return the own address type for advertising * * @hide */ @SystemApi public @AddressTypeStatus int getOwnAddressType() { return mOwnAddressType; } @Override public String toString() { return "Settings [mAdvertiseMode=" + mAdvertiseMode + ", mAdvertiseTxPowerLevel=" + mAdvertiseTxPowerLevel + ", mAdvertiseConnectable=" + mAdvertiseConnectable + ", mAdvertiseTimeoutMillis=" + mAdvertiseTimeoutMillis + "]"; + ", mAdvertiseTimeoutMillis=" + mAdvertiseTimeoutMillis + ", mOwnAddressType=" + mOwnAddressType + "]"; } @Override Loading @@ -137,6 +156,7 @@ public final class AdvertiseSettings implements Parcelable { dest.writeInt(mAdvertiseTxPowerLevel); dest.writeInt(mAdvertiseConnectable ? 1 : 0); dest.writeInt(mAdvertiseTimeoutMillis); dest.writeInt(mOwnAddressType); } public static final @android.annotation.NonNull Parcelable.Creator<AdvertiseSettings> CREATOR = Loading @@ -160,6 +180,7 @@ public final class AdvertiseSettings implements Parcelable { private int mTxPowerLevel = ADVERTISE_TX_POWER_MEDIUM; private int mTimeoutMillis = 0; private boolean mConnectable = true; private int mOwnAddressType = AdvertisingSetParameters.ADDRESS_TYPE_DEFAULT; /** * Set advertise mode to control the advertising power and latency. Loading Loading @@ -225,11 +246,32 @@ public final class AdvertiseSettings implements Parcelable { return this; } /** * Set own address type for advertising to control public or privacy mode. If used to set * address type anything other than {@link AdvertisingSetParameters#ADDRESS_TYPE_DEFAULT}, * then it will require BLUETOOTH_PRIVILEGED permission and will be checked at the * time of starting advertising. * * @throws IllegalArgumentException If the {@code ownAddressType} is invalid * * @hide */ @SystemApi public @NonNull Builder setOwnAddressType(@AddressTypeStatus int ownAddressType) { if (ownAddressType < AdvertisingSetParameters.ADDRESS_TYPE_DEFAULT || ownAddressType > AdvertisingSetParameters.ADDRESS_TYPE_RANDOM) { throw new IllegalArgumentException("unknown address type " + ownAddressType); } mOwnAddressType = ownAddressType; return this; } /** * Build the {@link AdvertiseSettings} object. */ public AdvertiseSettings build() { return new AdvertiseSettings(mMode, mTxPowerLevel, mConnectable, mTimeoutMillis); return new AdvertiseSettings(mMode, mTxPowerLevel, mConnectable, mTimeoutMillis, mOwnAddressType); } } } core/java/android/bluetooth/le/AdvertisingSetParameters.java +79 −3 Original line number Diff line number Diff line Loading @@ -16,11 +16,17 @@ package android.bluetooth.le; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.SystemApi; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.os.Parcel; import android.os.Parcelable; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; /** * The {@link AdvertisingSetParameters} provide a way to adjust advertising * preferences for each Loading Loading @@ -97,6 +103,39 @@ public final class AdvertisingSetParameters implements Parcelable { */ private static final int LIMITED_ADVERTISING_MAX_MILLIS = 180 * 1000; /** @hide */ @IntDef(prefix = "ADDRESS_TYPE_", value = { ADDRESS_TYPE_DEFAULT, ADDRESS_TYPE_PUBLIC, ADDRESS_TYPE_RANDOM }) @Retention(RetentionPolicy.SOURCE) public @interface AddressTypeStatus {} /** * Advertise own address type that corresponds privacy settings of the device. * * @hide */ @SystemApi public static final int ADDRESS_TYPE_DEFAULT = -1; /** * Advertise own public address type. * * @hide */ @SystemApi public static final int ADDRESS_TYPE_PUBLIC = 0; /** * Generate and adverise own resolvable private address. * * @hide */ @SystemApi public static final int ADDRESS_TYPE_RANDOM = 1; private final boolean mIsLegacy; private final boolean mIsAnonymous; private final boolean mIncludeTxPower; Loading @@ -106,11 +145,12 @@ public final class AdvertisingSetParameters implements Parcelable { private final boolean mScannable; private final int mInterval; private final int mTxPowerLevel; private final int mOwnAddressType; private AdvertisingSetParameters(boolean connectable, boolean scannable, boolean isLegacy, boolean isAnonymous, boolean includeTxPower, int primaryPhy, int secondaryPhy, int interval, int txPowerLevel) { int interval, int txPowerLevel, @AddressTypeStatus int ownAddressType) { mConnectable = connectable; mScannable = scannable; mIsLegacy = isLegacy; Loading @@ -120,6 +160,7 @@ public final class AdvertisingSetParameters implements Parcelable { mSecondaryPhy = secondaryPhy; mInterval = interval; mTxPowerLevel = txPowerLevel; mOwnAddressType = ownAddressType; } private AdvertisingSetParameters(Parcel in) { Loading @@ -132,6 +173,7 @@ public final class AdvertisingSetParameters implements Parcelable { mSecondaryPhy = in.readInt(); mInterval = in.readInt(); mTxPowerLevel = in.readInt(); mOwnAddressType = in.readInt(); } /** Loading Loading @@ -197,6 +239,16 @@ public final class AdvertisingSetParameters implements Parcelable { return mTxPowerLevel; } /** * @return the own address type for advertising * * @hide */ @SystemApi public @AddressTypeStatus int getOwnAddressType() { return mOwnAddressType; } @Override public String toString() { return "AdvertisingSetParameters [connectable=" + mConnectable Loading @@ -206,7 +258,8 @@ public final class AdvertisingSetParameters implements Parcelable { + ", primaryPhy=" + mPrimaryPhy + ", secondaryPhy=" + mSecondaryPhy + ", interval=" + mInterval + ", txPowerLevel=" + mTxPowerLevel + "]"; + ", txPowerLevel=" + mTxPowerLevel + ", ownAddressType=" + mOwnAddressType + "]"; } @Override Loading @@ -225,6 +278,7 @@ public final class AdvertisingSetParameters implements Parcelable { dest.writeInt(mSecondaryPhy); dest.writeInt(mInterval); dest.writeInt(mTxPowerLevel); dest.writeInt(mOwnAddressType); } public static final @android.annotation.NonNull Parcelable.Creator<AdvertisingSetParameters> CREATOR = Loading Loading @@ -253,6 +307,7 @@ public final class AdvertisingSetParameters implements Parcelable { private int mSecondaryPhy = BluetoothDevice.PHY_LE_1M; private int mInterval = INTERVAL_LOW; private int mTxPowerLevel = TX_POWER_MEDIUM; private int mOwnAddressType = ADDRESS_TYPE_DEFAULT; /** * Set whether the advertisement type should be connectable or Loading Loading @@ -398,6 +453,26 @@ public final class AdvertisingSetParameters implements Parcelable { return this; } /** * Set own address type for advertising to control public or privacy mode. If used to set * address type anything other than {@link AdvertisingSetParameters#ADDRESS_TYPE_DEFAULT}, * then it will require BLUETOOTH_PRIVILEGED permission and will be checked at the * time of starting advertising. * * @throws IllegalArgumentException If the {@code ownAddressType} is invalid * * @hide */ @SystemApi public @NonNull Builder setOwnAddressType(@AddressTypeStatus int ownAddressType) { if (ownAddressType < AdvertisingSetParameters.ADDRESS_TYPE_DEFAULT || ownAddressType > AdvertisingSetParameters.ADDRESS_TYPE_RANDOM) { throw new IllegalArgumentException("unknown address type " + ownAddressType); } mOwnAddressType = ownAddressType; return this; } /** * Build the {@link AdvertisingSetParameters} object. * Loading Loading @@ -431,7 +506,8 @@ public final class AdvertisingSetParameters implements Parcelable { } return new AdvertisingSetParameters(mConnectable, mScannable, mIsLegacy, mIsAnonymous, mIncludeTxPower, mPrimaryPhy, mSecondaryPhy, mInterval, mTxPowerLevel); mIncludeTxPower, mPrimaryPhy, mSecondaryPhy, mInterval, mTxPowerLevel, mOwnAddressType); } } } core/java/android/bluetooth/le/BluetoothLeAdvertiser.java +1 −0 Original line number Diff line number Diff line Loading @@ -138,6 +138,7 @@ public final class BluetoothLeAdvertiser { parameters.setLegacyMode(true); parameters.setConnectable(isConnectable); parameters.setScannable(true); // legacy advertisements we support are always scannable parameters.setOwnAddressType(settings.getOwnAddressType()); if (settings.getMode() == AdvertiseSettings.ADVERTISE_MODE_LOW_POWER) { parameters.setInterval(1600); // 1s } else if (settings.getMode() == AdvertiseSettings.ADVERTISE_MODE_BALANCED) { Loading Loading
core/api/system-current.txt +19 −0 Original line number Diff line number Diff line Loading @@ -2264,6 +2264,25 @@ package android.bluetooth { package android.bluetooth.le { public final class AdvertiseSettings implements android.os.Parcelable { method public int getOwnAddressType(); } public static final class AdvertiseSettings.Builder { method @NonNull public android.bluetooth.le.AdvertiseSettings.Builder setOwnAddressType(int); } public final class AdvertisingSetParameters implements android.os.Parcelable { method public int getOwnAddressType(); field public static final int ADDRESS_TYPE_DEFAULT = -1; // 0xffffffff field public static final int ADDRESS_TYPE_PUBLIC = 0; // 0x0 field public static final int ADDRESS_TYPE_RANDOM = 1; // 0x1 } public static final class AdvertisingSetParameters.Builder { method @NonNull public android.bluetooth.le.AdvertisingSetParameters.Builder setOwnAddressType(int); } public final class BluetoothLeScanner { method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_SCAN, android.Manifest.permission.UPDATE_DEVICE_STATS}) public void startScanFromSource(android.os.WorkSource, android.bluetooth.le.ScanCallback); method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_SCAN, android.Manifest.permission.UPDATE_DEVICE_STATS}) public void startScanFromSource(java.util.List<android.bluetooth.le.ScanFilter>, android.bluetooth.le.ScanSettings, android.os.WorkSource, android.bluetooth.le.ScanCallback);
core/java/android/bluetooth/le/AdvertiseSettings.java +45 −3 Original line number Diff line number Diff line Loading @@ -16,6 +16,9 @@ package android.bluetooth.le; import android.annotation.NonNull; import android.annotation.SystemApi; import android.bluetooth.le.AdvertisingSetParameters.AddressTypeStatus; import android.os.Parcel; import android.os.Parcelable; Loading Loading @@ -70,17 +73,21 @@ public final class AdvertiseSettings implements Parcelable { */ private static final int LIMITED_ADVERTISING_MAX_MILLIS = 180 * 1000; private final int mAdvertiseMode; private final int mAdvertiseTxPowerLevel; private final int mAdvertiseTimeoutMillis; private final boolean mAdvertiseConnectable; private final int mOwnAddressType; private AdvertiseSettings(int advertiseMode, int advertiseTxPowerLevel, boolean advertiseConnectable, int advertiseTimeout) { boolean advertiseConnectable, int advertiseTimeout, @AddressTypeStatus int ownAddressType) { mAdvertiseMode = advertiseMode; mAdvertiseTxPowerLevel = advertiseTxPowerLevel; mAdvertiseConnectable = advertiseConnectable; mAdvertiseTimeoutMillis = advertiseTimeout; mOwnAddressType = ownAddressType; } private AdvertiseSettings(Parcel in) { Loading @@ -88,6 +95,7 @@ public final class AdvertiseSettings implements Parcelable { mAdvertiseTxPowerLevel = in.readInt(); mAdvertiseConnectable = in.readInt() != 0; mAdvertiseTimeoutMillis = in.readInt(); mOwnAddressType = in.readInt(); } /** Loading Loading @@ -118,12 +126,23 @@ public final class AdvertiseSettings implements Parcelable { return mAdvertiseTimeoutMillis; } /** * @return the own address type for advertising * * @hide */ @SystemApi public @AddressTypeStatus int getOwnAddressType() { return mOwnAddressType; } @Override public String toString() { return "Settings [mAdvertiseMode=" + mAdvertiseMode + ", mAdvertiseTxPowerLevel=" + mAdvertiseTxPowerLevel + ", mAdvertiseConnectable=" + mAdvertiseConnectable + ", mAdvertiseTimeoutMillis=" + mAdvertiseTimeoutMillis + "]"; + ", mAdvertiseTimeoutMillis=" + mAdvertiseTimeoutMillis + ", mOwnAddressType=" + mOwnAddressType + "]"; } @Override Loading @@ -137,6 +156,7 @@ public final class AdvertiseSettings implements Parcelable { dest.writeInt(mAdvertiseTxPowerLevel); dest.writeInt(mAdvertiseConnectable ? 1 : 0); dest.writeInt(mAdvertiseTimeoutMillis); dest.writeInt(mOwnAddressType); } public static final @android.annotation.NonNull Parcelable.Creator<AdvertiseSettings> CREATOR = Loading @@ -160,6 +180,7 @@ public final class AdvertiseSettings implements Parcelable { private int mTxPowerLevel = ADVERTISE_TX_POWER_MEDIUM; private int mTimeoutMillis = 0; private boolean mConnectable = true; private int mOwnAddressType = AdvertisingSetParameters.ADDRESS_TYPE_DEFAULT; /** * Set advertise mode to control the advertising power and latency. Loading Loading @@ -225,11 +246,32 @@ public final class AdvertiseSettings implements Parcelable { return this; } /** * Set own address type for advertising to control public or privacy mode. If used to set * address type anything other than {@link AdvertisingSetParameters#ADDRESS_TYPE_DEFAULT}, * then it will require BLUETOOTH_PRIVILEGED permission and will be checked at the * time of starting advertising. * * @throws IllegalArgumentException If the {@code ownAddressType} is invalid * * @hide */ @SystemApi public @NonNull Builder setOwnAddressType(@AddressTypeStatus int ownAddressType) { if (ownAddressType < AdvertisingSetParameters.ADDRESS_TYPE_DEFAULT || ownAddressType > AdvertisingSetParameters.ADDRESS_TYPE_RANDOM) { throw new IllegalArgumentException("unknown address type " + ownAddressType); } mOwnAddressType = ownAddressType; return this; } /** * Build the {@link AdvertiseSettings} object. */ public AdvertiseSettings build() { return new AdvertiseSettings(mMode, mTxPowerLevel, mConnectable, mTimeoutMillis); return new AdvertiseSettings(mMode, mTxPowerLevel, mConnectable, mTimeoutMillis, mOwnAddressType); } } }
core/java/android/bluetooth/le/AdvertisingSetParameters.java +79 −3 Original line number Diff line number Diff line Loading @@ -16,11 +16,17 @@ package android.bluetooth.le; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.SystemApi; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.os.Parcel; import android.os.Parcelable; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; /** * The {@link AdvertisingSetParameters} provide a way to adjust advertising * preferences for each Loading Loading @@ -97,6 +103,39 @@ public final class AdvertisingSetParameters implements Parcelable { */ private static final int LIMITED_ADVERTISING_MAX_MILLIS = 180 * 1000; /** @hide */ @IntDef(prefix = "ADDRESS_TYPE_", value = { ADDRESS_TYPE_DEFAULT, ADDRESS_TYPE_PUBLIC, ADDRESS_TYPE_RANDOM }) @Retention(RetentionPolicy.SOURCE) public @interface AddressTypeStatus {} /** * Advertise own address type that corresponds privacy settings of the device. * * @hide */ @SystemApi public static final int ADDRESS_TYPE_DEFAULT = -1; /** * Advertise own public address type. * * @hide */ @SystemApi public static final int ADDRESS_TYPE_PUBLIC = 0; /** * Generate and adverise own resolvable private address. * * @hide */ @SystemApi public static final int ADDRESS_TYPE_RANDOM = 1; private final boolean mIsLegacy; private final boolean mIsAnonymous; private final boolean mIncludeTxPower; Loading @@ -106,11 +145,12 @@ public final class AdvertisingSetParameters implements Parcelable { private final boolean mScannable; private final int mInterval; private final int mTxPowerLevel; private final int mOwnAddressType; private AdvertisingSetParameters(boolean connectable, boolean scannable, boolean isLegacy, boolean isAnonymous, boolean includeTxPower, int primaryPhy, int secondaryPhy, int interval, int txPowerLevel) { int interval, int txPowerLevel, @AddressTypeStatus int ownAddressType) { mConnectable = connectable; mScannable = scannable; mIsLegacy = isLegacy; Loading @@ -120,6 +160,7 @@ public final class AdvertisingSetParameters implements Parcelable { mSecondaryPhy = secondaryPhy; mInterval = interval; mTxPowerLevel = txPowerLevel; mOwnAddressType = ownAddressType; } private AdvertisingSetParameters(Parcel in) { Loading @@ -132,6 +173,7 @@ public final class AdvertisingSetParameters implements Parcelable { mSecondaryPhy = in.readInt(); mInterval = in.readInt(); mTxPowerLevel = in.readInt(); mOwnAddressType = in.readInt(); } /** Loading Loading @@ -197,6 +239,16 @@ public final class AdvertisingSetParameters implements Parcelable { return mTxPowerLevel; } /** * @return the own address type for advertising * * @hide */ @SystemApi public @AddressTypeStatus int getOwnAddressType() { return mOwnAddressType; } @Override public String toString() { return "AdvertisingSetParameters [connectable=" + mConnectable Loading @@ -206,7 +258,8 @@ public final class AdvertisingSetParameters implements Parcelable { + ", primaryPhy=" + mPrimaryPhy + ", secondaryPhy=" + mSecondaryPhy + ", interval=" + mInterval + ", txPowerLevel=" + mTxPowerLevel + "]"; + ", txPowerLevel=" + mTxPowerLevel + ", ownAddressType=" + mOwnAddressType + "]"; } @Override Loading @@ -225,6 +278,7 @@ public final class AdvertisingSetParameters implements Parcelable { dest.writeInt(mSecondaryPhy); dest.writeInt(mInterval); dest.writeInt(mTxPowerLevel); dest.writeInt(mOwnAddressType); } public static final @android.annotation.NonNull Parcelable.Creator<AdvertisingSetParameters> CREATOR = Loading Loading @@ -253,6 +307,7 @@ public final class AdvertisingSetParameters implements Parcelable { private int mSecondaryPhy = BluetoothDevice.PHY_LE_1M; private int mInterval = INTERVAL_LOW; private int mTxPowerLevel = TX_POWER_MEDIUM; private int mOwnAddressType = ADDRESS_TYPE_DEFAULT; /** * Set whether the advertisement type should be connectable or Loading Loading @@ -398,6 +453,26 @@ public final class AdvertisingSetParameters implements Parcelable { return this; } /** * Set own address type for advertising to control public or privacy mode. If used to set * address type anything other than {@link AdvertisingSetParameters#ADDRESS_TYPE_DEFAULT}, * then it will require BLUETOOTH_PRIVILEGED permission and will be checked at the * time of starting advertising. * * @throws IllegalArgumentException If the {@code ownAddressType} is invalid * * @hide */ @SystemApi public @NonNull Builder setOwnAddressType(@AddressTypeStatus int ownAddressType) { if (ownAddressType < AdvertisingSetParameters.ADDRESS_TYPE_DEFAULT || ownAddressType > AdvertisingSetParameters.ADDRESS_TYPE_RANDOM) { throw new IllegalArgumentException("unknown address type " + ownAddressType); } mOwnAddressType = ownAddressType; return this; } /** * Build the {@link AdvertisingSetParameters} object. * Loading Loading @@ -431,7 +506,8 @@ public final class AdvertisingSetParameters implements Parcelable { } return new AdvertisingSetParameters(mConnectable, mScannable, mIsLegacy, mIsAnonymous, mIncludeTxPower, mPrimaryPhy, mSecondaryPhy, mInterval, mTxPowerLevel); mIncludeTxPower, mPrimaryPhy, mSecondaryPhy, mInterval, mTxPowerLevel, mOwnAddressType); } } }
core/java/android/bluetooth/le/BluetoothLeAdvertiser.java +1 −0 Original line number Diff line number Diff line Loading @@ -138,6 +138,7 @@ public final class BluetoothLeAdvertiser { parameters.setLegacyMode(true); parameters.setConnectable(isConnectable); parameters.setScannable(true); // legacy advertisements we support are always scannable parameters.setOwnAddressType(settings.getOwnAddressType()); if (settings.getMode() == AdvertiseSettings.ADVERTISE_MODE_LOW_POWER) { parameters.setInterval(1600); // 1s } else if (settings.getMode() == AdvertiseSettings.ADVERTISE_MODE_BALANCED) { Loading