Merge "Bluetooth 5 Advertising API"
This commit is contained in:
@@ -131,6 +131,7 @@ LOCAL_SRC_FILES += \
|
||||
core/java/android/bluetooth/IBluetoothGattCallbackExt.aidl \
|
||||
core/java/android/bluetooth/IBluetoothGattServerCallbackExt.aidl \
|
||||
core/java/android/bluetooth/le/IAdvertiserCallback.aidl \
|
||||
core/java/android/bluetooth/le/IAdvertisingSetCallback.aidl \
|
||||
core/java/android/bluetooth/le/IPeriodicAdvertisingCallback.aidl \
|
||||
core/java/android/bluetooth/le/IScannerCallback.aidl \
|
||||
core/java/android/content/IClipboard.aidl \
|
||||
|
||||
@@ -7504,10 +7504,85 @@ package android.bluetooth.le {
|
||||
method public android.bluetooth.le.AdvertiseSettings.Builder setTxPowerLevel(int);
|
||||
}
|
||||
|
||||
public final class AdvertisingSet {
|
||||
method public void enableAdvertising(boolean);
|
||||
method public void periodicAdvertisingEnable(boolean);
|
||||
method public void setAdvertisingData(android.bluetooth.le.AdvertiseData);
|
||||
method public void setAdvertisingParameters(android.bluetooth.le.AdvertisingSetParameters);
|
||||
method public void setPeriodicAdvertisingData(android.bluetooth.le.AdvertiseData);
|
||||
method public void setPeriodicAdvertisingParameters(android.bluetooth.le.PeriodicAdvertisingParameters);
|
||||
method public void setScanResponseData(android.bluetooth.le.AdvertiseData);
|
||||
}
|
||||
|
||||
public abstract class AdvertisingSetCallback {
|
||||
ctor public AdvertisingSetCallback();
|
||||
method public void onAdvertisingDataSet(android.bluetooth.le.AdvertisingSet, int);
|
||||
method public void onAdvertisingEnabled(android.bluetooth.le.AdvertisingSet, boolean, int);
|
||||
method public void onAdvertisingParametersUpdated(android.bluetooth.le.AdvertisingSet, int);
|
||||
method public void onAdvertisingSetStarted(android.bluetooth.le.AdvertisingSet, int);
|
||||
method public void onAdvertisingSetStopped(android.bluetooth.le.AdvertisingSet);
|
||||
method public void onPeriodicAdvertisingDataSet(android.bluetooth.le.AdvertisingSet, int);
|
||||
method public void onPeriodicAdvertisingEnable(android.bluetooth.le.AdvertisingSet, boolean, int);
|
||||
method public void onPeriodicAdvertisingParametersUpdated(android.bluetooth.le.AdvertisingSet, int);
|
||||
method public void onScanResponseDataSet(android.bluetooth.le.AdvertisingSet, int);
|
||||
field public static final int ADVERTISE_FAILED_ALREADY_STARTED = 3; // 0x3
|
||||
field public static final int ADVERTISE_FAILED_DATA_TOO_LARGE = 1; // 0x1
|
||||
field public static final int ADVERTISE_FAILED_FEATURE_UNSUPPORTED = 5; // 0x5
|
||||
field public static final int ADVERTISE_FAILED_INTERNAL_ERROR = 4; // 0x4
|
||||
field public static final int ADVERTISE_FAILED_TOO_MANY_ADVERTISERS = 2; // 0x2
|
||||
field public static final int ADVERTISE_SUCCESS = 0; // 0x0
|
||||
}
|
||||
|
||||
public final class AdvertisingSetParameters implements android.os.Parcelable {
|
||||
method public int describeContents();
|
||||
method public int getInterval();
|
||||
method public int getPrimaryPhy();
|
||||
method public int getSecondaryPhy();
|
||||
method public int getTimeout();
|
||||
method public int getTxPowerLevel();
|
||||
method public boolean includeTxPower();
|
||||
method public boolean isAnonymous();
|
||||
method public boolean isConnectable();
|
||||
method public boolean isLegacy();
|
||||
method public void writeToParcel(android.os.Parcel, int);
|
||||
field public static final android.os.Parcelable.Creator<android.bluetooth.le.AdvertisingSetParameters> CREATOR;
|
||||
field public static final int INTERVAL_HIGH = 160; // 0xa0
|
||||
field public static final int INTERVAL_LOW = 1600; // 0x640
|
||||
field public static final int INTERVAL_MAX = 16777215; // 0xffffff
|
||||
field public static final int INTERVAL_MEDIUM = 400; // 0x190
|
||||
field public static final int INTERVAL_MIN = 160; // 0xa0
|
||||
field public static final int PHY_LE_1M = 1; // 0x1
|
||||
field public static final int PHY_LE_2M = 2; // 0x2
|
||||
field public static final int PHY_LE_CODED = 3; // 0x3
|
||||
field public static final int TX_POWER_HIGH = 1; // 0x1
|
||||
field public static final int TX_POWER_LOW = -15; // 0xfffffff1
|
||||
field public static final int TX_POWER_MAX = 1; // 0x1
|
||||
field public static final int TX_POWER_MEDIUM = -7; // 0xfffffff9
|
||||
field public static final int TX_POWER_MIN = -127; // 0xffffff81
|
||||
field public static final int TX_POWER_ULTRA_LOW = -21; // 0xffffffeb
|
||||
}
|
||||
|
||||
public static final class AdvertisingSetParameters.Builder {
|
||||
ctor public AdvertisingSetParameters.Builder();
|
||||
method public android.bluetooth.le.AdvertisingSetParameters build();
|
||||
method public android.bluetooth.le.AdvertisingSetParameters.Builder setAnonymouus(boolean);
|
||||
method public android.bluetooth.le.AdvertisingSetParameters.Builder setConnectable(boolean);
|
||||
method public android.bluetooth.le.AdvertisingSetParameters.Builder setIncludeTxPower(boolean);
|
||||
method public android.bluetooth.le.AdvertisingSetParameters.Builder setInterval(int);
|
||||
method public android.bluetooth.le.AdvertisingSetParameters.Builder setLegacyMode(boolean);
|
||||
method public android.bluetooth.le.AdvertisingSetParameters.Builder setPrimaryPhy(int);
|
||||
method public android.bluetooth.le.AdvertisingSetParameters.Builder setSecondaryPhy(int);
|
||||
method public android.bluetooth.le.AdvertisingSetParameters.Builder setTimeout(int);
|
||||
method public android.bluetooth.le.AdvertisingSetParameters.Builder setTxPowerLevel(int);
|
||||
}
|
||||
|
||||
public final class BluetoothLeAdvertiser {
|
||||
method public void startAdvertising(android.bluetooth.le.AdvertiseSettings, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertiseCallback);
|
||||
method public void startAdvertising(android.bluetooth.le.AdvertiseSettings, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertiseCallback);
|
||||
method public void startAdvertisingSet(android.bluetooth.le.AdvertisingSetParameters, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertiseData, android.bluetooth.le.PeriodicAdvertisingParameters, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertisingSetCallback);
|
||||
method public void startAdvertisingSet(android.bluetooth.le.AdvertisingSetParameters, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertiseData, android.bluetooth.le.PeriodicAdvertisingParameters, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertisingSetCallback, android.os.Handler);
|
||||
method public void stopAdvertising(android.bluetooth.le.AdvertiseCallback);
|
||||
method public void stopAdvertisingSet(android.bluetooth.le.AdvertisingSetCallback);
|
||||
}
|
||||
|
||||
public final class BluetoothLeScanner {
|
||||
@@ -7532,6 +7607,23 @@ package android.bluetooth.le {
|
||||
method public void unregisterSync(android.bluetooth.le.PeriodicAdvertisingCallback);
|
||||
}
|
||||
|
||||
public final class PeriodicAdvertisingParameters implements android.os.Parcelable {
|
||||
method public int describeContents();
|
||||
method public boolean getEnable();
|
||||
method public boolean getIncludeTxPower();
|
||||
method public int getInterval();
|
||||
method public void writeToParcel(android.os.Parcel, int);
|
||||
field public static final android.os.Parcelable.Creator<android.bluetooth.le.PeriodicAdvertisingParameters> CREATOR;
|
||||
}
|
||||
|
||||
public static final class PeriodicAdvertisingParameters.Builder {
|
||||
ctor public PeriodicAdvertisingParameters.Builder();
|
||||
method public android.bluetooth.le.PeriodicAdvertisingParameters build();
|
||||
method public android.bluetooth.le.PeriodicAdvertisingParameters.Builder setEnable(boolean);
|
||||
method public android.bluetooth.le.PeriodicAdvertisingParameters.Builder setIncludeTxPower(boolean);
|
||||
method public android.bluetooth.le.PeriodicAdvertisingParameters.Builder setInterval(int);
|
||||
}
|
||||
|
||||
public final class PeriodicAdvertisingReport implements android.os.Parcelable {
|
||||
ctor public PeriodicAdvertisingReport(int, int, int, int, android.bluetooth.le.ScanRecord);
|
||||
method public int describeContents();
|
||||
|
||||
@@ -7808,10 +7808,85 @@ package android.bluetooth.le {
|
||||
method public android.bluetooth.le.AdvertiseSettings.Builder setTxPowerLevel(int);
|
||||
}
|
||||
|
||||
public final class AdvertisingSet {
|
||||
method public void enableAdvertising(boolean);
|
||||
method public void periodicAdvertisingEnable(boolean);
|
||||
method public void setAdvertisingData(android.bluetooth.le.AdvertiseData);
|
||||
method public void setAdvertisingParameters(android.bluetooth.le.AdvertisingSetParameters);
|
||||
method public void setPeriodicAdvertisingData(android.bluetooth.le.AdvertiseData);
|
||||
method public void setPeriodicAdvertisingParameters(android.bluetooth.le.PeriodicAdvertisingParameters);
|
||||
method public void setScanResponseData(android.bluetooth.le.AdvertiseData);
|
||||
}
|
||||
|
||||
public abstract class AdvertisingSetCallback {
|
||||
ctor public AdvertisingSetCallback();
|
||||
method public void onAdvertisingDataSet(android.bluetooth.le.AdvertisingSet, int);
|
||||
method public void onAdvertisingEnabled(android.bluetooth.le.AdvertisingSet, boolean, int);
|
||||
method public void onAdvertisingParametersUpdated(android.bluetooth.le.AdvertisingSet, int);
|
||||
method public void onAdvertisingSetStarted(android.bluetooth.le.AdvertisingSet, int);
|
||||
method public void onAdvertisingSetStopped(android.bluetooth.le.AdvertisingSet);
|
||||
method public void onPeriodicAdvertisingDataSet(android.bluetooth.le.AdvertisingSet, int);
|
||||
method public void onPeriodicAdvertisingEnable(android.bluetooth.le.AdvertisingSet, boolean, int);
|
||||
method public void onPeriodicAdvertisingParametersUpdated(android.bluetooth.le.AdvertisingSet, int);
|
||||
method public void onScanResponseDataSet(android.bluetooth.le.AdvertisingSet, int);
|
||||
field public static final int ADVERTISE_FAILED_ALREADY_STARTED = 3; // 0x3
|
||||
field public static final int ADVERTISE_FAILED_DATA_TOO_LARGE = 1; // 0x1
|
||||
field public static final int ADVERTISE_FAILED_FEATURE_UNSUPPORTED = 5; // 0x5
|
||||
field public static final int ADVERTISE_FAILED_INTERNAL_ERROR = 4; // 0x4
|
||||
field public static final int ADVERTISE_FAILED_TOO_MANY_ADVERTISERS = 2; // 0x2
|
||||
field public static final int ADVERTISE_SUCCESS = 0; // 0x0
|
||||
}
|
||||
|
||||
public final class AdvertisingSetParameters implements android.os.Parcelable {
|
||||
method public int describeContents();
|
||||
method public int getInterval();
|
||||
method public int getPrimaryPhy();
|
||||
method public int getSecondaryPhy();
|
||||
method public int getTimeout();
|
||||
method public int getTxPowerLevel();
|
||||
method public boolean includeTxPower();
|
||||
method public boolean isAnonymous();
|
||||
method public boolean isConnectable();
|
||||
method public boolean isLegacy();
|
||||
method public void writeToParcel(android.os.Parcel, int);
|
||||
field public static final android.os.Parcelable.Creator<android.bluetooth.le.AdvertisingSetParameters> CREATOR;
|
||||
field public static final int INTERVAL_HIGH = 160; // 0xa0
|
||||
field public static final int INTERVAL_LOW = 1600; // 0x640
|
||||
field public static final int INTERVAL_MAX = 16777215; // 0xffffff
|
||||
field public static final int INTERVAL_MEDIUM = 400; // 0x190
|
||||
field public static final int INTERVAL_MIN = 160; // 0xa0
|
||||
field public static final int PHY_LE_1M = 1; // 0x1
|
||||
field public static final int PHY_LE_2M = 2; // 0x2
|
||||
field public static final int PHY_LE_CODED = 3; // 0x3
|
||||
field public static final int TX_POWER_HIGH = 1; // 0x1
|
||||
field public static final int TX_POWER_LOW = -15; // 0xfffffff1
|
||||
field public static final int TX_POWER_MAX = 1; // 0x1
|
||||
field public static final int TX_POWER_MEDIUM = -7; // 0xfffffff9
|
||||
field public static final int TX_POWER_MIN = -127; // 0xffffff81
|
||||
field public static final int TX_POWER_ULTRA_LOW = -21; // 0xffffffeb
|
||||
}
|
||||
|
||||
public static final class AdvertisingSetParameters.Builder {
|
||||
ctor public AdvertisingSetParameters.Builder();
|
||||
method public android.bluetooth.le.AdvertisingSetParameters build();
|
||||
method public android.bluetooth.le.AdvertisingSetParameters.Builder setAnonymouus(boolean);
|
||||
method public android.bluetooth.le.AdvertisingSetParameters.Builder setConnectable(boolean);
|
||||
method public android.bluetooth.le.AdvertisingSetParameters.Builder setIncludeTxPower(boolean);
|
||||
method public android.bluetooth.le.AdvertisingSetParameters.Builder setInterval(int);
|
||||
method public android.bluetooth.le.AdvertisingSetParameters.Builder setLegacyMode(boolean);
|
||||
method public android.bluetooth.le.AdvertisingSetParameters.Builder setPrimaryPhy(int);
|
||||
method public android.bluetooth.le.AdvertisingSetParameters.Builder setSecondaryPhy(int);
|
||||
method public android.bluetooth.le.AdvertisingSetParameters.Builder setTimeout(int);
|
||||
method public android.bluetooth.le.AdvertisingSetParameters.Builder setTxPowerLevel(int);
|
||||
}
|
||||
|
||||
public final class BluetoothLeAdvertiser {
|
||||
method public void startAdvertising(android.bluetooth.le.AdvertiseSettings, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertiseCallback);
|
||||
method public void startAdvertising(android.bluetooth.le.AdvertiseSettings, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertiseCallback);
|
||||
method public void startAdvertisingSet(android.bluetooth.le.AdvertisingSetParameters, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertiseData, android.bluetooth.le.PeriodicAdvertisingParameters, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertisingSetCallback);
|
||||
method public void startAdvertisingSet(android.bluetooth.le.AdvertisingSetParameters, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertiseData, android.bluetooth.le.PeriodicAdvertisingParameters, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertisingSetCallback, android.os.Handler);
|
||||
method public void stopAdvertising(android.bluetooth.le.AdvertiseCallback);
|
||||
method public void stopAdvertisingSet(android.bluetooth.le.AdvertisingSetCallback);
|
||||
}
|
||||
|
||||
public final class BluetoothLeScanner {
|
||||
@@ -7839,6 +7914,23 @@ package android.bluetooth.le {
|
||||
method public void unregisterSync(android.bluetooth.le.PeriodicAdvertisingCallback);
|
||||
}
|
||||
|
||||
public final class PeriodicAdvertisingParameters implements android.os.Parcelable {
|
||||
method public int describeContents();
|
||||
method public boolean getEnable();
|
||||
method public boolean getIncludeTxPower();
|
||||
method public int getInterval();
|
||||
method public void writeToParcel(android.os.Parcel, int);
|
||||
field public static final android.os.Parcelable.Creator<android.bluetooth.le.PeriodicAdvertisingParameters> CREATOR;
|
||||
}
|
||||
|
||||
public static final class PeriodicAdvertisingParameters.Builder {
|
||||
ctor public PeriodicAdvertisingParameters.Builder();
|
||||
method public android.bluetooth.le.PeriodicAdvertisingParameters build();
|
||||
method public android.bluetooth.le.PeriodicAdvertisingParameters.Builder setEnable(boolean);
|
||||
method public android.bluetooth.le.PeriodicAdvertisingParameters.Builder setIncludeTxPower(boolean);
|
||||
method public android.bluetooth.le.PeriodicAdvertisingParameters.Builder setInterval(int);
|
||||
}
|
||||
|
||||
public final class PeriodicAdvertisingReport implements android.os.Parcelable {
|
||||
ctor public PeriodicAdvertisingReport(int, int, int, int, android.bluetooth.le.ScanRecord);
|
||||
method public int describeContents();
|
||||
|
||||
@@ -7513,10 +7513,85 @@ package android.bluetooth.le {
|
||||
method public android.bluetooth.le.AdvertiseSettings.Builder setTxPowerLevel(int);
|
||||
}
|
||||
|
||||
public final class AdvertisingSet {
|
||||
method public void enableAdvertising(boolean);
|
||||
method public void periodicAdvertisingEnable(boolean);
|
||||
method public void setAdvertisingData(android.bluetooth.le.AdvertiseData);
|
||||
method public void setAdvertisingParameters(android.bluetooth.le.AdvertisingSetParameters);
|
||||
method public void setPeriodicAdvertisingData(android.bluetooth.le.AdvertiseData);
|
||||
method public void setPeriodicAdvertisingParameters(android.bluetooth.le.PeriodicAdvertisingParameters);
|
||||
method public void setScanResponseData(android.bluetooth.le.AdvertiseData);
|
||||
}
|
||||
|
||||
public abstract class AdvertisingSetCallback {
|
||||
ctor public AdvertisingSetCallback();
|
||||
method public void onAdvertisingDataSet(android.bluetooth.le.AdvertisingSet, int);
|
||||
method public void onAdvertisingEnabled(android.bluetooth.le.AdvertisingSet, boolean, int);
|
||||
method public void onAdvertisingParametersUpdated(android.bluetooth.le.AdvertisingSet, int);
|
||||
method public void onAdvertisingSetStarted(android.bluetooth.le.AdvertisingSet, int);
|
||||
method public void onAdvertisingSetStopped(android.bluetooth.le.AdvertisingSet);
|
||||
method public void onPeriodicAdvertisingDataSet(android.bluetooth.le.AdvertisingSet, int);
|
||||
method public void onPeriodicAdvertisingEnable(android.bluetooth.le.AdvertisingSet, boolean, int);
|
||||
method public void onPeriodicAdvertisingParametersUpdated(android.bluetooth.le.AdvertisingSet, int);
|
||||
method public void onScanResponseDataSet(android.bluetooth.le.AdvertisingSet, int);
|
||||
field public static final int ADVERTISE_FAILED_ALREADY_STARTED = 3; // 0x3
|
||||
field public static final int ADVERTISE_FAILED_DATA_TOO_LARGE = 1; // 0x1
|
||||
field public static final int ADVERTISE_FAILED_FEATURE_UNSUPPORTED = 5; // 0x5
|
||||
field public static final int ADVERTISE_FAILED_INTERNAL_ERROR = 4; // 0x4
|
||||
field public static final int ADVERTISE_FAILED_TOO_MANY_ADVERTISERS = 2; // 0x2
|
||||
field public static final int ADVERTISE_SUCCESS = 0; // 0x0
|
||||
}
|
||||
|
||||
public final class AdvertisingSetParameters implements android.os.Parcelable {
|
||||
method public int describeContents();
|
||||
method public int getInterval();
|
||||
method public int getPrimaryPhy();
|
||||
method public int getSecondaryPhy();
|
||||
method public int getTimeout();
|
||||
method public int getTxPowerLevel();
|
||||
method public boolean includeTxPower();
|
||||
method public boolean isAnonymous();
|
||||
method public boolean isConnectable();
|
||||
method public boolean isLegacy();
|
||||
method public void writeToParcel(android.os.Parcel, int);
|
||||
field public static final android.os.Parcelable.Creator<android.bluetooth.le.AdvertisingSetParameters> CREATOR;
|
||||
field public static final int INTERVAL_HIGH = 160; // 0xa0
|
||||
field public static final int INTERVAL_LOW = 1600; // 0x640
|
||||
field public static final int INTERVAL_MAX = 16777215; // 0xffffff
|
||||
field public static final int INTERVAL_MEDIUM = 400; // 0x190
|
||||
field public static final int INTERVAL_MIN = 160; // 0xa0
|
||||
field public static final int PHY_LE_1M = 1; // 0x1
|
||||
field public static final int PHY_LE_2M = 2; // 0x2
|
||||
field public static final int PHY_LE_CODED = 3; // 0x3
|
||||
field public static final int TX_POWER_HIGH = 1; // 0x1
|
||||
field public static final int TX_POWER_LOW = -15; // 0xfffffff1
|
||||
field public static final int TX_POWER_MAX = 1; // 0x1
|
||||
field public static final int TX_POWER_MEDIUM = -7; // 0xfffffff9
|
||||
field public static final int TX_POWER_MIN = -127; // 0xffffff81
|
||||
field public static final int TX_POWER_ULTRA_LOW = -21; // 0xffffffeb
|
||||
}
|
||||
|
||||
public static final class AdvertisingSetParameters.Builder {
|
||||
ctor public AdvertisingSetParameters.Builder();
|
||||
method public android.bluetooth.le.AdvertisingSetParameters build();
|
||||
method public android.bluetooth.le.AdvertisingSetParameters.Builder setAnonymouus(boolean);
|
||||
method public android.bluetooth.le.AdvertisingSetParameters.Builder setConnectable(boolean);
|
||||
method public android.bluetooth.le.AdvertisingSetParameters.Builder setIncludeTxPower(boolean);
|
||||
method public android.bluetooth.le.AdvertisingSetParameters.Builder setInterval(int);
|
||||
method public android.bluetooth.le.AdvertisingSetParameters.Builder setLegacyMode(boolean);
|
||||
method public android.bluetooth.le.AdvertisingSetParameters.Builder setPrimaryPhy(int);
|
||||
method public android.bluetooth.le.AdvertisingSetParameters.Builder setSecondaryPhy(int);
|
||||
method public android.bluetooth.le.AdvertisingSetParameters.Builder setTimeout(int);
|
||||
method public android.bluetooth.le.AdvertisingSetParameters.Builder setTxPowerLevel(int);
|
||||
}
|
||||
|
||||
public final class BluetoothLeAdvertiser {
|
||||
method public void startAdvertising(android.bluetooth.le.AdvertiseSettings, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertiseCallback);
|
||||
method public void startAdvertising(android.bluetooth.le.AdvertiseSettings, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertiseCallback);
|
||||
method public void startAdvertisingSet(android.bluetooth.le.AdvertisingSetParameters, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertiseData, android.bluetooth.le.PeriodicAdvertisingParameters, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertisingSetCallback);
|
||||
method public void startAdvertisingSet(android.bluetooth.le.AdvertisingSetParameters, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertiseData, android.bluetooth.le.PeriodicAdvertisingParameters, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertisingSetCallback, android.os.Handler);
|
||||
method public void stopAdvertising(android.bluetooth.le.AdvertiseCallback);
|
||||
method public void stopAdvertisingSet(android.bluetooth.le.AdvertisingSetCallback);
|
||||
}
|
||||
|
||||
public final class BluetoothLeScanner {
|
||||
@@ -7541,6 +7616,23 @@ package android.bluetooth.le {
|
||||
method public void unregisterSync(android.bluetooth.le.PeriodicAdvertisingCallback);
|
||||
}
|
||||
|
||||
public final class PeriodicAdvertisingParameters implements android.os.Parcelable {
|
||||
method public int describeContents();
|
||||
method public boolean getEnable();
|
||||
method public boolean getIncludeTxPower();
|
||||
method public int getInterval();
|
||||
method public void writeToParcel(android.os.Parcel, int);
|
||||
field public static final android.os.Parcelable.Creator<android.bluetooth.le.PeriodicAdvertisingParameters> CREATOR;
|
||||
}
|
||||
|
||||
public static final class PeriodicAdvertisingParameters.Builder {
|
||||
ctor public PeriodicAdvertisingParameters.Builder();
|
||||
method public android.bluetooth.le.PeriodicAdvertisingParameters build();
|
||||
method public android.bluetooth.le.PeriodicAdvertisingParameters.Builder setEnable(boolean);
|
||||
method public android.bluetooth.le.PeriodicAdvertisingParameters.Builder setIncludeTxPower(boolean);
|
||||
method public android.bluetooth.le.PeriodicAdvertisingParameters.Builder setInterval(int);
|
||||
}
|
||||
|
||||
public final class PeriodicAdvertisingReport implements android.os.Parcelable {
|
||||
ctor public PeriodicAdvertisingReport(int, int, int, int, android.bluetooth.le.ScanRecord);
|
||||
method public int describeContents();
|
||||
|
||||
@@ -20,6 +20,8 @@ import android.bluetooth.BluetoothDevice;
|
||||
import android.bluetooth.BluetoothGattService;
|
||||
import android.bluetooth.le.AdvertiseSettings;
|
||||
import android.bluetooth.le.AdvertiseData;
|
||||
import android.bluetooth.le.AdvertisingSetParameters;
|
||||
import android.bluetooth.le.PeriodicAdvertisingParameters;
|
||||
import android.bluetooth.le.ScanFilter;
|
||||
import android.bluetooth.le.ScanResult;
|
||||
import android.bluetooth.le.ScanSettings;
|
||||
@@ -30,6 +32,7 @@ import android.os.WorkSource;
|
||||
import android.bluetooth.IBluetoothGattCallbackExt;
|
||||
import android.bluetooth.IBluetoothGattServerCallbackExt;
|
||||
import android.bluetooth.le.IAdvertiserCallback;
|
||||
import android.bluetooth.le.IAdvertisingSetCallback;
|
||||
import android.bluetooth.le.IPeriodicAdvertisingCallback;
|
||||
import android.bluetooth.le.IScannerCallback;
|
||||
|
||||
@@ -55,10 +58,24 @@ interface IBluetoothGatt {
|
||||
in AdvertiseSettings settings);
|
||||
void stopMultiAdvertising(in int advertiserId);
|
||||
|
||||
void startAdvertisingSet(in AdvertisingSetParameters parameters, in AdvertiseData advertiseData,
|
||||
in AdvertiseData scanResponse, in PeriodicAdvertisingParameters periodicParameters,
|
||||
in AdvertiseData periodicData, in IAdvertisingSetCallback callback);
|
||||
void stopAdvertisingSet(in IAdvertisingSetCallback callback);
|
||||
|
||||
void enableAdverisingSet(in int advertiserId, in boolean enable);
|
||||
void setAdvertisingData(in int advertiserId, in AdvertiseData data);
|
||||
void setScanResponseData(in int advertiserId, in AdvertiseData data);
|
||||
void setAdvertisingParameters(in int advertiserId, in AdvertisingSetParameters parameters);
|
||||
void setPeriodicAdvertisingParameters(in int advertiserId, in PeriodicAdvertisingParameters parameters);
|
||||
void setPeriodicAdvertisingData(in int advertiserId, in AdvertiseData data);
|
||||
void periodicAdvertisingEnable(in int advertiserId, in boolean enable);
|
||||
|
||||
void registerSync(in ScanResult scanResult, in int skip, in int timeout, in IPeriodicAdvertisingCallback callback);
|
||||
void unregisterSync(in IPeriodicAdvertisingCallback callback);
|
||||
|
||||
void registerClient(in ParcelUuid appId, in IBluetoothGattCallbackExt callback);
|
||||
|
||||
void unregisterClient(in int clientIf);
|
||||
void clientConnect(in int clientIf, in String address, in boolean isDirect, in int transport, in int phy);
|
||||
void clientDisconnect(in int clientIf, in String address);
|
||||
|
||||
162
core/java/android/bluetooth/le/AdvertisingSet.java
Normal file
162
core/java/android/bluetooth/le/AdvertisingSet.java
Normal file
@@ -0,0 +1,162 @@
|
||||
/*
|
||||
* Copyright (C) 2017 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.bluetooth.le;
|
||||
|
||||
import android.bluetooth.IBluetoothGatt;
|
||||
import android.bluetooth.IBluetoothManager;
|
||||
import android.bluetooth.le.IAdvertisingSetCallback;
|
||||
import android.os.RemoteException;
|
||||
import android.util.Log;
|
||||
|
||||
/**
|
||||
* This class provides a way to control single Bluetooth LE advertising instance.
|
||||
* <p>
|
||||
* To get an instance of {@link AdvertisingSet}, call the
|
||||
* {@link BluetoothLeAdvertiser#startAdvertisingSet} method.
|
||||
* <p>
|
||||
* <b>Note:</b> Most of the methods here require {@link android.Manifest.permission#BLUETOOTH_ADMIN}
|
||||
* permission.
|
||||
*
|
||||
* @see AdvertiseData
|
||||
*/
|
||||
public final class AdvertisingSet {
|
||||
private static final String TAG = "AdvertisingSet";
|
||||
|
||||
private final IBluetoothGatt gatt;
|
||||
private int advertiserId;
|
||||
|
||||
/* package */ AdvertisingSet(int advertiserId,
|
||||
IBluetoothManager bluetoothManager) {
|
||||
this.advertiserId = advertiserId;
|
||||
|
||||
try {
|
||||
this.gatt = bluetoothManager.getBluetoothGatt();
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG, "Failed to get Bluetooth gatt - ", e);
|
||||
throw new IllegalStateException("Failed to get Bluetooth");
|
||||
}
|
||||
}
|
||||
|
||||
/* package */ void setAdvertiserId(int advertiserId) {
|
||||
this.advertiserId = advertiserId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Enables Advertising. This method returns immediately, the operation status is
|
||||
* delivered
|
||||
* through {@code callback.onAdvertisingEnabled()}.
|
||||
* <p>
|
||||
* Requires {@link android.Manifest.permission#BLUETOOTH_ADMIN}
|
||||
*
|
||||
*/
|
||||
public void enableAdvertising(boolean enable) {
|
||||
try {
|
||||
gatt.enableAdverisingSet(this.advertiserId, enable);
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG, "remote exception - ", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set/update data being Advertised. Make sure that data doesn't exceed the size limit for
|
||||
* specified AdvertisingSetParameters. This method returns immediately, the operation status is
|
||||
* delivered through {@code callback.onAdvertisingDataSet()}.
|
||||
* <p>
|
||||
* Advertising data must be empty if non-legacy scannable advertising is used.
|
||||
*/
|
||||
public void setAdvertisingData(AdvertiseData data) {
|
||||
try {
|
||||
gatt.setAdvertisingData(this.advertiserId, data);
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG, "remote exception - ", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set/update scan response data. Make sure that data doesn't exceed the size limit for
|
||||
* specified AdvertisingSetParameters. This method returns immediately, the operation status
|
||||
* is delivered through {@code callback.onScanResponseDataSet()}.
|
||||
*/
|
||||
public void setScanResponseData(AdvertiseData data) {
|
||||
try {
|
||||
gatt.setScanResponseData(this.advertiserId, data);
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG, "remote exception - ", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update advertising parameters associated with this AdvertisingSet. Must be called when
|
||||
* advertising is not active. This method returns immediately, the operation status is delivered
|
||||
* through {@code callback.onAdvertisingParametersUpdated}.
|
||||
*/
|
||||
public void setAdvertisingParameters(AdvertisingSetParameters parameters) {
|
||||
try {
|
||||
gatt.setAdvertisingParameters(this.advertiserId, parameters);
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG, "remote exception - ", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update periodic advertising parameters associated with this set. Must be called when
|
||||
* periodic advertising is not enabled. This method returns immediately, the operation
|
||||
* status is delivered through {@code callback.onPeriodicAdvertisingParametersUpdated()}.
|
||||
*/
|
||||
public void setPeriodicAdvertisingParameters(PeriodicAdvertisingParameters parameters) {
|
||||
try {
|
||||
gatt.setPeriodicAdvertisingParameters(this.advertiserId, parameters);
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG, "remote exception - ", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Used to set periodic advertising data, must be called after setPeriodicAdvertisingParameters,
|
||||
* or after advertising was started with periodic advertising data set. This method returns
|
||||
* immediately, the operation status is delivered through
|
||||
* {@code callback.onPeriodicAdvertisingDataSet()}.
|
||||
*/
|
||||
public void setPeriodicAdvertisingData(AdvertiseData data) {
|
||||
try {
|
||||
gatt.setPeriodicAdvertisingData(this.advertiserId, data);
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG, "remote exception - ", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Used to enable/disable periodic advertising. This method returns immediately, the operation
|
||||
* status is delivered through {@code callback.onPeriodicAdvertisingEnable()}.
|
||||
*/
|
||||
public void periodicAdvertisingEnable(boolean enable) {
|
||||
try {
|
||||
gatt.periodicAdvertisingEnable(this.advertiserId, enable);
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG, "remote exception - ", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns advertiserId associated with thsi advertising set.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public int getAdvertiserId(){
|
||||
return advertiserId;
|
||||
}
|
||||
}
|
||||
144
core/java/android/bluetooth/le/AdvertisingSetCallback.java
Normal file
144
core/java/android/bluetooth/le/AdvertisingSetCallback.java
Normal file
@@ -0,0 +1,144 @@
|
||||
/*
|
||||
* Copyright (C) 2017 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.bluetooth.le;
|
||||
|
||||
import android.bluetooth.BluetoothDevice;
|
||||
|
||||
/**
|
||||
* Bluetooth LE advertising set callbacks, used to deliver advertising operation
|
||||
* status.
|
||||
*/
|
||||
public abstract class AdvertisingSetCallback {
|
||||
|
||||
/**
|
||||
* The requested operation was successful.
|
||||
*/
|
||||
public static final int ADVERTISE_SUCCESS = 0;
|
||||
|
||||
/**
|
||||
* Failed to start advertising as the advertise data to be broadcasted is too
|
||||
* large.
|
||||
*/
|
||||
public static final int ADVERTISE_FAILED_DATA_TOO_LARGE = 1;
|
||||
|
||||
/**
|
||||
* Failed to start advertising because no advertising instance is available.
|
||||
*/
|
||||
public static final int ADVERTISE_FAILED_TOO_MANY_ADVERTISERS = 2;
|
||||
|
||||
/**
|
||||
* Failed to start advertising as the advertising is already started.
|
||||
*/
|
||||
public static final int ADVERTISE_FAILED_ALREADY_STARTED = 3;
|
||||
|
||||
/**
|
||||
* Operation failed due to an internal error.
|
||||
*/
|
||||
public static final int ADVERTISE_FAILED_INTERNAL_ERROR = 4;
|
||||
|
||||
/**
|
||||
* This feature is not supported on this platform.
|
||||
*/
|
||||
public static final int ADVERTISE_FAILED_FEATURE_UNSUPPORTED = 5;
|
||||
|
||||
/**
|
||||
* Callback triggered in response to {@link BluetoothLeAdvertiser#startAdvertisingSet}
|
||||
* indicating result of the operation. If status is ADVERTISE_SUCCESS, then advertisingSet
|
||||
* contains the started set and it is advertising. If error occured, advertisingSet is
|
||||
* null, and status will be set to proper error code.
|
||||
*
|
||||
* @param advertisingSet The advertising set that was started or null if error.
|
||||
* @param status Status of the operation.
|
||||
*/
|
||||
public void onAdvertisingSetStarted(AdvertisingSet advertisingSet, int status) {}
|
||||
|
||||
/**
|
||||
* Callback triggered in response to {@link BluetoothLeAdvertiser#stopAdvertisingSet}
|
||||
* indicating advertising set is stopped.
|
||||
*
|
||||
* @param advertisingSet The advertising set.
|
||||
*/
|
||||
public void onAdvertisingSetStopped(AdvertisingSet advertisingSet) {}
|
||||
|
||||
/**
|
||||
* Callback triggered in response to {@link BluetoothLeAdvertiser#startAdvertisingSet} indicating
|
||||
* result of the operation. If status is ADVERTISE_SUCCESS, then advertising set is advertising.
|
||||
*
|
||||
* @param advertisingSet The advertising set.
|
||||
* @param status Status of the operation.
|
||||
*/
|
||||
public void onAdvertisingEnabled(AdvertisingSet advertisingSet, boolean enable, int status) {}
|
||||
|
||||
/**
|
||||
* Callback triggered in response to {@link AdvertisingSet#setAdvertisingData} indicating
|
||||
* result of the operation. If status is ADVERTISE_SUCCESS, then data was changed.
|
||||
*
|
||||
* @param advertisingSet The advertising set.
|
||||
* @param status Status of the operation.
|
||||
*/
|
||||
public void onAdvertisingDataSet(AdvertisingSet advertisingSet, int status) {}
|
||||
|
||||
/**
|
||||
* Callback triggered in response to {@link AdvertisingSet#setAdvertisingData} indicating
|
||||
* result of the operation.
|
||||
*
|
||||
* @param advertisingSet The advertising set.
|
||||
* @param status Status of the operation.
|
||||
*/
|
||||
public void onScanResponseDataSet(AdvertisingSet advertisingSet, int status) {}
|
||||
|
||||
/**
|
||||
* Callback triggered in response to {@link AdvertisingSet#setAdvertisingParameters}
|
||||
* indicating result of the operation.
|
||||
*
|
||||
* @param advertisingSet The advertising set.
|
||||
* @param status Status of the operation.
|
||||
*/
|
||||
public void onAdvertisingParametersUpdated(AdvertisingSet advertisingSet,
|
||||
int status) {}
|
||||
|
||||
/**
|
||||
* Callback triggered in response to {@link AdvertisingSet#setPeriodicAdvertisingParameters}
|
||||
* indicating result of the operation.
|
||||
*
|
||||
* @param advertisingSet The advertising set.
|
||||
* @param status Status of the operation.
|
||||
*/
|
||||
public void
|
||||
onPeriodicAdvertisingParametersUpdated(AdvertisingSet advertisingSet,
|
||||
int status) {}
|
||||
|
||||
/**
|
||||
* Callback triggered in response to {@link AdvertisingSet#setPeriodicAdvertisingData}
|
||||
* indicating result of the operation.
|
||||
*
|
||||
* @param advertisingSet The advertising set.
|
||||
* @param status Status of the operation.
|
||||
*/
|
||||
public void onPeriodicAdvertisingDataSet(AdvertisingSet advertisingSet,
|
||||
int status) {}
|
||||
|
||||
/**
|
||||
* Callback triggered in response to {@link AdvertisingSet#periodicAdvertisingEnable}
|
||||
* indicating result of the operation.
|
||||
*
|
||||
* @param advertisingSet The advertising set.
|
||||
* @param status Status of the operation.
|
||||
*/
|
||||
public void onPeriodicAdvertisingEnable(AdvertisingSet advertisingSet, boolean enable,
|
||||
int status) {}
|
||||
}
|
||||
19
core/java/android/bluetooth/le/AdvertisingSetParameters.aidl
Normal file
19
core/java/android/bluetooth/le/AdvertisingSetParameters.aidl
Normal file
@@ -0,0 +1,19 @@
|
||||
/*
|
||||
* Copyright (C) 2017 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.bluetooth.le;
|
||||
|
||||
parcelable AdvertisingSetParameters;
|
||||
409
core/java/android/bluetooth/le/AdvertisingSetParameters.java
Normal file
409
core/java/android/bluetooth/le/AdvertisingSetParameters.java
Normal file
@@ -0,0 +1,409 @@
|
||||
/*
|
||||
* Copyright (C) 2017 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.bluetooth.le;
|
||||
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
|
||||
/**
|
||||
* The {@link AdvertisingSetParameters} provide a way to adjust advertising
|
||||
* preferences for each
|
||||
* Bluetooth LE advertising set. Use {@link AdvertisingSetParameters.Builder} to
|
||||
* create an
|
||||
* instance of this class.
|
||||
*/
|
||||
public final class AdvertisingSetParameters implements Parcelable {
|
||||
|
||||
/**
|
||||
* 1M advertiser PHY.
|
||||
*/
|
||||
public static final int PHY_LE_1M = 1;
|
||||
|
||||
/**
|
||||
* 2M advertiser PHY.
|
||||
*/
|
||||
public static final int PHY_LE_2M = 2;
|
||||
|
||||
/**
|
||||
* LE Coded advertiser PHY.
|
||||
*/
|
||||
public static final int PHY_LE_CODED = 3;
|
||||
|
||||
/**
|
||||
* Advertise on low frequency, around every 1000ms. This is the default and
|
||||
* preferred advertising mode as it consumes the least power.
|
||||
*/
|
||||
public static final int INTERVAL_LOW = 1600;
|
||||
|
||||
/**
|
||||
* Advertise on medium frequency, around every 250ms. This is balanced
|
||||
* between advertising frequency and power consumption.
|
||||
*/
|
||||
public static final int INTERVAL_MEDIUM = 400;
|
||||
|
||||
/**
|
||||
* Perform high frequency, low latency advertising, around every 100ms. This
|
||||
* has the highest power consumption and should not be used for continuous
|
||||
* background advertising.
|
||||
*/
|
||||
public static final int INTERVAL_HIGH = 160;
|
||||
|
||||
/**
|
||||
* Minimum value for advertising interval.
|
||||
*/
|
||||
public static final int INTERVAL_MIN = 160;
|
||||
|
||||
/**
|
||||
* Maximum value for advertising interval.
|
||||
*/
|
||||
public static final int INTERVAL_MAX = 16777215;
|
||||
|
||||
/**
|
||||
* Advertise using the lowest transmission (TX) power level. Low transmission
|
||||
* power can be used to restrict the visibility range of advertising packets.
|
||||
*/
|
||||
public static final int TX_POWER_ULTRA_LOW = -21;
|
||||
|
||||
/**
|
||||
* Advertise using low TX power level.
|
||||
*/
|
||||
public static final int TX_POWER_LOW = -15;
|
||||
|
||||
/**
|
||||
* Advertise using medium TX power level.
|
||||
*/
|
||||
public static final int TX_POWER_MEDIUM = -7;
|
||||
|
||||
/**
|
||||
* Advertise using high TX power level. This corresponds to largest visibility
|
||||
* range of the advertising packet.
|
||||
*/
|
||||
public static final int TX_POWER_HIGH = 1;
|
||||
|
||||
/**
|
||||
* Minimum value for TX power.
|
||||
*/
|
||||
public static final int TX_POWER_MIN = -127;
|
||||
|
||||
/**
|
||||
* Maximum value for TX power.
|
||||
*/
|
||||
public static final int TX_POWER_MAX = 1;
|
||||
|
||||
/**
|
||||
* The maximum limited advertisement duration as specified by the Bluetooth
|
||||
* SIG
|
||||
*/
|
||||
private static final int LIMITED_ADVERTISING_MAX_MILLIS = 180 * 1000;
|
||||
|
||||
private final boolean isLegacy;
|
||||
private final boolean isAnonymous;
|
||||
private final boolean includeTxPower;
|
||||
private final int primaryPhy;
|
||||
private final int secondaryPhy;
|
||||
private final boolean connectable;
|
||||
private final int interval;
|
||||
private final int txPowerLevel;
|
||||
private final int timeoutMillis;
|
||||
|
||||
private AdvertisingSetParameters(boolean connectable, boolean isLegacy,
|
||||
boolean isAnonymous, boolean includeTxPower,
|
||||
int primaryPhy, int secondaryPhy,
|
||||
int interval, int txPowerLevel,
|
||||
int timeoutMillis) {
|
||||
this.connectable = connectable;
|
||||
this.isLegacy = isLegacy;
|
||||
this.isAnonymous = isAnonymous;
|
||||
this.includeTxPower = includeTxPower;
|
||||
this.primaryPhy = primaryPhy;
|
||||
this.secondaryPhy = secondaryPhy;
|
||||
this.interval = interval;
|
||||
this.txPowerLevel = txPowerLevel;
|
||||
this.timeoutMillis = timeoutMillis;
|
||||
}
|
||||
|
||||
private AdvertisingSetParameters(Parcel in) {
|
||||
connectable = in.readInt() != 0 ? true : false;
|
||||
isLegacy = in.readInt() != 0 ? true : false;
|
||||
isAnonymous = in.readInt() != 0 ? true : false;
|
||||
includeTxPower = in.readInt() != 0 ? true : false;
|
||||
primaryPhy = in.readInt();
|
||||
secondaryPhy = in.readInt();
|
||||
interval = in.readInt();
|
||||
txPowerLevel = in.readInt();
|
||||
timeoutMillis = in.readInt();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether the advertisement will be connectable.
|
||||
*/
|
||||
public boolean isConnectable() { return connectable; }
|
||||
|
||||
/**
|
||||
* Returns whether the legacy advertisement will be used.
|
||||
*/
|
||||
public boolean isLegacy() { return isLegacy; }
|
||||
|
||||
/**
|
||||
* Returns whether the advertisement will be anonymous.
|
||||
*/
|
||||
public boolean isAnonymous() { return isAnonymous; }
|
||||
|
||||
/**
|
||||
* Returns whether the TX Power will be included.
|
||||
*/
|
||||
public boolean includeTxPower() { return includeTxPower; }
|
||||
|
||||
/**
|
||||
* Returns the primary advertising phy.
|
||||
*/
|
||||
public int getPrimaryPhy() { return primaryPhy; }
|
||||
|
||||
/**
|
||||
* Returns the secondary advertising phy.
|
||||
*/
|
||||
public int getSecondaryPhy() { return secondaryPhy; }
|
||||
|
||||
/**
|
||||
* Returns the advertising interval.
|
||||
*/
|
||||
public int getInterval() { return interval; }
|
||||
|
||||
/**
|
||||
* Returns the TX power level for advertising.
|
||||
*/
|
||||
public int getTxPowerLevel() { return txPowerLevel; }
|
||||
|
||||
/**
|
||||
* Returns the advertising time limit in milliseconds.
|
||||
*/
|
||||
public int getTimeout() { return timeoutMillis; }
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "AdvertisingSetParameters [connectable=" + connectable
|
||||
+ ", isLegacy=" + isLegacy
|
||||
+ ", isAnonymous=" + isAnonymous
|
||||
+ ", includeTxPower=" + includeTxPower
|
||||
+ ", primaryPhy=" + primaryPhy
|
||||
+ ", secondaryPhy=" + secondaryPhy
|
||||
+ ", interval=" + interval
|
||||
+ ", txPowerLevel=" + txPowerLevel
|
||||
+ ", timeoutMillis=" + timeoutMillis + "]";
|
||||
}
|
||||
|
||||
@Override
|
||||
public int describeContents() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToParcel(Parcel dest, int flags) {
|
||||
dest.writeInt(connectable ? 1 : 0);
|
||||
dest.writeInt(isLegacy ? 1 : 0);
|
||||
dest.writeInt(isAnonymous ? 1 : 0);
|
||||
dest.writeInt(includeTxPower ? 1 : 0);
|
||||
dest.writeInt(primaryPhy);
|
||||
dest.writeInt(secondaryPhy);
|
||||
dest.writeInt(interval);
|
||||
dest.writeInt(txPowerLevel);
|
||||
dest.writeInt(timeoutMillis);
|
||||
}
|
||||
|
||||
public static final Parcelable.Creator<AdvertisingSetParameters> CREATOR =
|
||||
new Creator<AdvertisingSetParameters>() {
|
||||
@Override
|
||||
public AdvertisingSetParameters[] newArray(int size) {
|
||||
return new AdvertisingSetParameters[size];
|
||||
}
|
||||
|
||||
@Override
|
||||
public AdvertisingSetParameters createFromParcel(Parcel in) {
|
||||
return new AdvertisingSetParameters(in);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Builder class for {@link AdvertisingSetParameters}.
|
||||
*/
|
||||
public static final class Builder {
|
||||
|
||||
private boolean connectable = true;
|
||||
private boolean isLegacy = false;
|
||||
private boolean isAnonymous = false;
|
||||
private boolean includeTxPower = false;
|
||||
private int primaryPhy = PHY_LE_1M;
|
||||
private int secondaryPhy = PHY_LE_1M;
|
||||
private int interval = INTERVAL_LOW;
|
||||
private int txPowerLevel = TX_POWER_MEDIUM;
|
||||
private int timeoutMillis = 0;
|
||||
|
||||
/**
|
||||
* Set whether the advertisement type should be connectable or
|
||||
* non-connectable.
|
||||
* Legacy advertisements can be both connectable and scannable. Other
|
||||
* advertisements can be connectable only if not scannable.
|
||||
* @param connectable Controls whether the advertisment type will be
|
||||
* connectable (true) or non-connectable (false).
|
||||
*/
|
||||
public Builder setConnectable(boolean connectable) {
|
||||
this.connectable = connectable;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* When set to true, advertising set will advertise 4.x Spec compliant
|
||||
* advertisements.
|
||||
*
|
||||
* @param isLegacy wether legacy advertising mode should be used.
|
||||
*/
|
||||
public Builder setLegacyMode(boolean isLegacy) {
|
||||
this.isLegacy = isLegacy;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set wether advertiser address should be ommited from all packets. If this
|
||||
* mode is used, periodic advertising can't be enabled for this set.
|
||||
*
|
||||
* This is used only if legacy mode is not used.
|
||||
*
|
||||
* @param isAnonymous wether anonymous advertising should be used.
|
||||
*/
|
||||
public Builder setAnonymouus(boolean isAnonymous) {
|
||||
this.isAnonymous = isAnonymous;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set wether TX power should be included in the extended header.
|
||||
*
|
||||
* This is used only if legacy mode is not used.
|
||||
*
|
||||
* @param includeTxPower wether TX power should be included in extended
|
||||
* header
|
||||
*/
|
||||
public Builder setIncludeTxPower(boolean includeTxPower) {
|
||||
this.includeTxPower = includeTxPower;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the primary physical channel used for this advertising set.
|
||||
*
|
||||
* This is used only if legacy mode is not used.
|
||||
*
|
||||
* @param primaryPhy Primary advertising physical channel, can only be
|
||||
* {@link AdvertisingSetParameters#PHY_LE_1M} or
|
||||
* {@link AdvertisingSetParameters#PHY_LE_CODED}.
|
||||
* @throws IllegalArgumentException If the primaryPhy is invalid.
|
||||
*/
|
||||
public Builder setPrimaryPhy(int primaryPhy) {
|
||||
if (primaryPhy != PHY_LE_1M && primaryPhy != PHY_LE_CODED) {
|
||||
throw new IllegalArgumentException("bad primaryPhy " + primaryPhy);
|
||||
}
|
||||
this.primaryPhy = primaryPhy;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the secondary physical channel used for this advertising set.
|
||||
*
|
||||
* This is used only if legacy mode is not used.
|
||||
*
|
||||
* @param secondaryPhy Secondary advertising physical channel, can only be
|
||||
* one of {@link AdvertisingSetParameters#PHY_LE_1M},
|
||||
* {@link AdvertisingSetParameters#PHY_LE_2M} or
|
||||
* {@link AdvertisingSetParameters#PHY_LE_CODED}.
|
||||
* @throws IllegalArgumentException If the secondaryPhy is invalid.
|
||||
*/
|
||||
public Builder setSecondaryPhy(int secondaryPhy) {
|
||||
if (secondaryPhy != PHY_LE_1M && secondaryPhy !=PHY_LE_2M &&
|
||||
secondaryPhy != PHY_LE_CODED) {
|
||||
throw new IllegalArgumentException("bad secondaryPhy " + secondaryPhy);
|
||||
}
|
||||
this.secondaryPhy = secondaryPhy;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set advertising interval.
|
||||
*
|
||||
* @param interval Bluetooth LE Advertising interval, in 0.625ms unit. Valid
|
||||
* range is from 160 (100ms) to 16777215 (10,485.759375 s).
|
||||
* Recommended values are:
|
||||
* {@link AdvertisingSetParameters#INTERVAL_LOW},
|
||||
* {@link AdvertisingSetParameters#INTERVAL_MEDIUM}, or
|
||||
* {@link AdvertisingSetParameters#INTERVAL_HIGH}.
|
||||
* @throws IllegalArgumentException If the interval is invalid.
|
||||
*/
|
||||
public Builder setInterval(int interval) {
|
||||
if (interval < INTERVAL_MIN || interval > INTERVAL_MAX) {
|
||||
throw new IllegalArgumentException("unknown interval " + interval);
|
||||
}
|
||||
this.interval = interval;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the transmission power level for the advertising.
|
||||
* @param txPowerLevel Transmission power of Bluetooth LE Advertising, in
|
||||
* dBm. The valid range is [-127, 1] Recommended values are:
|
||||
* {@link AdvertisingSetParameters#TX_POWER_ULTRA_LOW},
|
||||
* {@link AdvertisingSetParameters#TX_POWER_LOW},
|
||||
* {@link AdvertisingSetParameters#TX_POWER_MEDIUM}, or
|
||||
* {@link AdvertisingSetParameters#TX_POWER_HIGH}.
|
||||
*
|
||||
* @throws IllegalArgumentException If the {@code txPowerLevel} is invalid.
|
||||
*/
|
||||
public Builder setTxPowerLevel(int txPowerLevel) {
|
||||
if (txPowerLevel < TX_POWER_MIN || txPowerLevel > TX_POWER_MAX) {
|
||||
throw new IllegalArgumentException("unknown txPowerLevel " +
|
||||
txPowerLevel);
|
||||
}
|
||||
this.txPowerLevel = txPowerLevel;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Limit advertising to a given amount of time.
|
||||
* @param timeoutMillis Advertising time limit. May not exceed 180000
|
||||
* milliseconds. A value of 0 will disable the time limit.
|
||||
* @throws IllegalArgumentException If the provided timeout is over 180000
|
||||
* ms.
|
||||
*/
|
||||
public Builder setTimeout(int timeoutMillis) {
|
||||
if (timeoutMillis < 0 || timeoutMillis > LIMITED_ADVERTISING_MAX_MILLIS) {
|
||||
throw new IllegalArgumentException("timeoutMillis invalid (must be 0-" +
|
||||
LIMITED_ADVERTISING_MAX_MILLIS +
|
||||
" milliseconds)");
|
||||
}
|
||||
this.timeoutMillis = timeoutMillis;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build the {@link AdvertisingSetParameters} object.
|
||||
*/
|
||||
public AdvertisingSetParameters build() {
|
||||
return new AdvertisingSetParameters(connectable, isLegacy, isAnonymous,
|
||||
includeTxPower, primaryPhy,
|
||||
secondaryPhy, interval, txPowerLevel,
|
||||
timeoutMillis);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -62,6 +62,9 @@ public final class BluetoothLeAdvertiser {
|
||||
private BluetoothAdapter mBluetoothAdapter;
|
||||
private final Map<AdvertiseCallback, AdvertiseCallbackWrapper>
|
||||
mLeAdvertisers = new HashMap<AdvertiseCallback, AdvertiseCallbackWrapper>();
|
||||
private final Map<AdvertisingSetCallback, IAdvertisingSetCallback>
|
||||
advertisingSetCallbackWrappers = new HashMap<>();
|
||||
private final Map<Integer, AdvertisingSet> advertisingSets = new HashMap<>();
|
||||
|
||||
/**
|
||||
* Use BluetoothAdapter.getLeAdvertiser() instead.
|
||||
@@ -155,6 +158,93 @@ public final class BluetoothLeAdvertiser {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new advertising set. If operation succeed, device will start advertising. This
|
||||
* method returns immediately, the operation status is delivered through
|
||||
* {@code callback.onNewAdvertisingSet()}.
|
||||
* <p>
|
||||
* @param parameters advertising set parameters.
|
||||
* @param advertiseData Advertisement data to be broadcasted.
|
||||
* @param scanResponse Scan response associated with the advertisement data.
|
||||
* @param periodicData Periodic advertising data.
|
||||
* @param callback Callback for advertising set.
|
||||
*/
|
||||
public void startAdvertisingSet(AdvertisingSetParameters parameters,
|
||||
AdvertiseData advertiseData, AdvertiseData scanResponse,
|
||||
PeriodicAdvertisingParameters periodicParameters,
|
||||
AdvertiseData periodicData, AdvertisingSetCallback callback) {
|
||||
startAdvertisingSet(parameters, advertiseData, scanResponse, periodicParameters,
|
||||
periodicData, callback, new Handler(Looper.getMainLooper()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new advertising set. If operation succeed, device will start advertising. This
|
||||
* method returns immediately, the operation status is delivered through
|
||||
* {@code callback.onNewAdvertisingSet()}.
|
||||
* <p>
|
||||
* @param parameters advertising set parameters.
|
||||
* @param advertiseData Advertisement data to be broadcasted.
|
||||
* @param scanResponse Scan response associated with the advertisement data.
|
||||
* @param periodicData Periodic advertising data.
|
||||
* @param callback Callback for advertising set.
|
||||
* @param handler thread upon which the callbacks will be invoked.
|
||||
*/
|
||||
public void startAdvertisingSet(AdvertisingSetParameters parameters,
|
||||
AdvertiseData advertiseData, AdvertiseData scanResponse,
|
||||
PeriodicAdvertisingParameters periodicParameters,
|
||||
AdvertiseData periodicData, AdvertisingSetCallback callback,
|
||||
Handler handler) {
|
||||
BluetoothLeUtils.checkAdapterStateOn(mBluetoothAdapter);
|
||||
|
||||
if (callback == null) {
|
||||
throw new IllegalArgumentException("callback cannot be null");
|
||||
}
|
||||
|
||||
IBluetoothGatt gatt;
|
||||
try {
|
||||
gatt = mBluetoothManager.getBluetoothGatt();
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG, "Failed to get Bluetooth gatt - ", e);
|
||||
throw new IllegalStateException("Failed to get Bluetooth");
|
||||
}
|
||||
|
||||
IAdvertisingSetCallback wrapped = wrap(callback, handler);
|
||||
advertisingSetCallbackWrappers.put(callback, wrapped);
|
||||
|
||||
try {
|
||||
gatt.startAdvertisingSet(parameters, advertiseData, scanResponse, periodicParameters,
|
||||
periodicData, wrapped);
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG, "Failed to start advertising set - ", e);
|
||||
throw new IllegalStateException("Failed to start advertising set");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Used to dispose of a {@link AdvertisingSet} object, obtained with {@link
|
||||
* BluetoothLeAdvertiser#startAdvertisingSet}.
|
||||
*/
|
||||
public void stopAdvertisingSet(AdvertisingSetCallback callback) {
|
||||
if (callback == null) {
|
||||
throw new IllegalArgumentException("callback cannot be null");
|
||||
}
|
||||
|
||||
IAdvertisingSetCallback wrapped = advertisingSetCallbackWrappers.remove(callback);
|
||||
if (wrapped == null) {
|
||||
throw new IllegalArgumentException(
|
||||
"callback does not represent valid registered callback.");
|
||||
}
|
||||
|
||||
IBluetoothGatt gatt;
|
||||
try {
|
||||
gatt = mBluetoothManager.getBluetoothGatt();
|
||||
gatt.stopAdvertisingSet(wrapped);
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG, "Failed to stop advertising - ", e);
|
||||
throw new IllegalStateException("Failed to stop advertising");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Cleans up advertisers. Should be called when bluetooth is down.
|
||||
*
|
||||
@@ -219,6 +309,110 @@ public final class BluetoothLeAdvertiser {
|
||||
return array == null ? 0 : array.length;
|
||||
}
|
||||
|
||||
IAdvertisingSetCallback wrap(AdvertisingSetCallback callback, Handler handler) {
|
||||
return new IAdvertisingSetCallback.Stub() {
|
||||
public void onAdvertisingSetStarted(int advertiserId, int status) {
|
||||
handler.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (status != AdvertisingSetCallback.ADVERTISE_SUCCESS) {
|
||||
callback.onAdvertisingSetStarted(null, status);
|
||||
advertisingSetCallbackWrappers.remove(callback);
|
||||
return;
|
||||
}
|
||||
|
||||
AdvertisingSet advertisingSet =
|
||||
new AdvertisingSet(advertiserId, mBluetoothManager);
|
||||
advertisingSets.put(advertiserId, advertisingSet);
|
||||
callback.onAdvertisingSetStarted(advertisingSet, status);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void onAdvertisingSetStopped(int advertiserId) {
|
||||
handler.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
AdvertisingSet advertisingSet = advertisingSets.get(advertiserId);
|
||||
callback.onAdvertisingSetStopped(advertisingSet);
|
||||
advertisingSets.remove(advertiserId);
|
||||
advertisingSetCallbackWrappers.remove(callback);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void onAdvertisingEnabled(int advertiserId, boolean enabled, int status) {
|
||||
handler.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
AdvertisingSet advertisingSet = advertisingSets.get(advertiserId);
|
||||
callback.onAdvertisingEnabled(advertisingSet, enabled, status);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void onAdvertisingDataSet(int advertiserId, int status) {
|
||||
handler.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
AdvertisingSet advertisingSet = advertisingSets.get(advertiserId);
|
||||
callback.onAdvertisingDataSet(advertisingSet, status);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void onScanResponseDataSet(int advertiserId, int status) {
|
||||
handler.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
AdvertisingSet advertisingSet = advertisingSets.get(advertiserId);
|
||||
callback.onScanResponseDataSet(advertisingSet, status);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void onAdvertisingParametersUpdated(int advertiserId, int status) {
|
||||
handler.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
AdvertisingSet advertisingSet = advertisingSets.get(advertiserId);
|
||||
callback.onAdvertisingParametersUpdated(advertisingSet, status);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void onPeriodicAdvertisingParametersUpdated(int advertiserId, int status) {
|
||||
handler.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
AdvertisingSet advertisingSet = advertisingSets.get(advertiserId);
|
||||
callback.onPeriodicAdvertisingParametersUpdated(advertisingSet, status);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void onPeriodicAdvertisingDataSet(int advertiserId, int status) {
|
||||
handler.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
AdvertisingSet advertisingSet = advertisingSets.get(advertiserId);
|
||||
callback.onPeriodicAdvertisingDataSet(advertisingSet, status);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void onPeriodicAdvertisingEnable(int advertiserId, boolean enable, int status) {
|
||||
handler.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
AdvertisingSet advertisingSet = advertisingSets.get(advertiserId);
|
||||
callback.onPeriodicAdvertisingEnable(advertisingSet, enable, status);
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Bluetooth GATT interface callbacks for advertising.
|
||||
*/
|
||||
|
||||
32
core/java/android/bluetooth/le/IAdvertisingSetCallback.aidl
Normal file
32
core/java/android/bluetooth/le/IAdvertisingSetCallback.aidl
Normal file
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* Copyright (C) 2017 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package android.bluetooth.le;
|
||||
|
||||
/**
|
||||
* Callback definitions for interacting with Advertiser
|
||||
* @hide
|
||||
*/
|
||||
oneway interface IAdvertisingSetCallback {
|
||||
void onAdvertisingSetStarted(in int advertiserId, in int status);
|
||||
void onAdvertisingSetStopped(in int advertiserId);
|
||||
void onAdvertisingEnabled(in int advertiserId, in boolean enable, in int status);
|
||||
void onAdvertisingDataSet(in int advertiserId, in int status);
|
||||
void onScanResponseDataSet(in int advertiserId, in int status);
|
||||
void onAdvertisingParametersUpdated(in int advertiserId, in int status);
|
||||
void onPeriodicAdvertisingParametersUpdated(in int advertiserId, in int status);
|
||||
void onPeriodicAdvertisingDataSet(in int advertiserId, in int status);
|
||||
void onPeriodicAdvertisingEnable(in int advertiserId, in boolean enable, in int status);
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
/*
|
||||
* Copyright (C) 2017 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.bluetooth.le;
|
||||
|
||||
parcelable PeriodicAdvertisingParameters;
|
||||
@@ -0,0 +1,134 @@
|
||||
/*
|
||||
* Copyright (C) 2017 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.bluetooth.le;
|
||||
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
|
||||
/**
|
||||
* The {@link PeriodicAdvertisingParameters} provide a way to adjust periodic
|
||||
* advertising preferences for each Bluetooth LE advertising set. Use {@link
|
||||
* AdvertisingSetParameters.Builder} to create an instance of this class.
|
||||
*/
|
||||
public final class PeriodicAdvertisingParameters implements Parcelable {
|
||||
|
||||
private static final int INTERVAL_MAX = 80;
|
||||
private static final int INTERVAL_MIN = 65519;
|
||||
|
||||
private final boolean enable;
|
||||
private final boolean includeTxPower;
|
||||
private final int interval;
|
||||
|
||||
private PeriodicAdvertisingParameters(boolean enable, boolean includeTxPower, int interval) {
|
||||
this.enable = enable;
|
||||
this.includeTxPower = includeTxPower;
|
||||
this.interval = interval;
|
||||
}
|
||||
|
||||
private PeriodicAdvertisingParameters(Parcel in) {
|
||||
enable = in.readInt() != 0 ? true : false;
|
||||
includeTxPower = in.readInt() != 0 ? true : false;
|
||||
interval = in.readInt();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether the periodic advertising shall be enabled.
|
||||
*/
|
||||
public boolean getEnable() { return enable; }
|
||||
|
||||
/**
|
||||
* Returns whether the TX Power will be included.
|
||||
*/
|
||||
public boolean getIncludeTxPower() { return includeTxPower; }
|
||||
|
||||
/**
|
||||
* Returns the periodic advertising interval, in 1.25ms unit.
|
||||
* Valid values are from 80 (100ms) to 65519 (81.89875s).
|
||||
*/
|
||||
public int getInterval() { return interval; }
|
||||
|
||||
@Override
|
||||
public int describeContents() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToParcel(Parcel dest, int flags) {
|
||||
dest.writeInt(enable ? 1 : 0);
|
||||
dest.writeInt(includeTxPower ? 1 : 0);
|
||||
dest.writeInt(interval);
|
||||
}
|
||||
|
||||
public static final Parcelable
|
||||
.Creator<PeriodicAdvertisingParameters> CREATOR =
|
||||
new Creator<PeriodicAdvertisingParameters>() {
|
||||
@Override
|
||||
public PeriodicAdvertisingParameters[] newArray(int size) {
|
||||
return new PeriodicAdvertisingParameters[size];
|
||||
}
|
||||
|
||||
@Override
|
||||
public PeriodicAdvertisingParameters createFromParcel(Parcel in) {
|
||||
return new PeriodicAdvertisingParameters(in);
|
||||
}
|
||||
};
|
||||
|
||||
public static final class Builder {
|
||||
private boolean includeTxPower = false;
|
||||
private boolean enable = false;
|
||||
private int interval = INTERVAL_MAX;
|
||||
|
||||
/**
|
||||
* Set wether the Periodic Advertising should be enabled for this set.
|
||||
*/
|
||||
public Builder setEnable(boolean enable) {
|
||||
this.enable = enable;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether the transmission power level should be included in the periodic
|
||||
* packet.
|
||||
*/
|
||||
public Builder setIncludeTxPower(boolean includeTxPower) {
|
||||
this.includeTxPower = includeTxPower;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set advertising interval for periodic advertising, in 1.25ms unit.
|
||||
* Valid values are from 80 (100ms) to 65519 (81.89875s).
|
||||
* Value from range [interval, interval+20ms] will be picked as the actual value.
|
||||
* @throws IllegalArgumentException If the interval is invalid.
|
||||
*/
|
||||
public Builder setInterval(int interval) {
|
||||
if (interval < INTERVAL_MIN || interval > INTERVAL_MAX) {
|
||||
throw new IllegalArgumentException("Invalid interval (must be " + INTERVAL_MIN +
|
||||
"-" + INTERVAL_MAX + ")");
|
||||
}
|
||||
this.interval = interval;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build the {@link AdvertisingSetParameters} object.
|
||||
*/
|
||||
public PeriodicAdvertisingParameters build() {
|
||||
return new PeriodicAdvertisingParameters(enable, includeTxPower, interval);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -214,7 +214,7 @@ public final class ScanResult implements Parcelable {
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the received signal strength in dBm. The valid range is [-127, 127].
|
||||
* Returns the received signal strength in dBm. The valid range is [-127, 126].
|
||||
*/
|
||||
public int getRssi() {
|
||||
return mRssi;
|
||||
|
||||
Reference in New Issue
Block a user