Added in [API level 28](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels) Summary: [Ctors](https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest.Builder#pubctors) \| [Methods](https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest.Builder#pubmethods) \| [Inherited Methods](https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest.Builder#inhmethods)

# RangingRequest.Builder

*** ** * ** ***


`
public
static
final

class
RangingRequest.Builder
`


`

extends https://developer.android.com/reference/java/lang/Object


`

`


`

|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object) ||
| ↳ | android.net.wifi.rtt.RangingRequest.Builder |

<br />

*** ** * ** ***

Builder class used to construct `https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest` objects.

## Summary

| ### Public constructors ||
|---|---|
| ` https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest.Builder#Builder()() ` |

| ### Public methods ||
|---|---|
| ` https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest.Builder` | ` https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest.Builder#addAccessPoint(android.net.wifi.ScanResult)(https://developer.android.com/reference/android/net/wifi/ScanResult apInfo) ` Add the device specified by the `https://developer.android.com/reference/android/net/wifi/ScanResult` to the list of devices with which to measure range. |
| ` https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest.Builder` | ` https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest.Builder#addAccessPoints(java.util.List<android.net.wifi.ScanResult>)(https://developer.android.com/reference/java/util/List<https://developer.android.com/reference/android/net/wifi/ScanResult> apInfos) ` Add the devices specified by the `https://developer.android.com/reference/android/net/wifi/ScanResult`s to the list of devices with which to measure range. |
| ` https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest.Builder` | ` https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest.Builder#addNon80211mcCapableAccessPoint(android.net.wifi.ScanResult)(https://developer.android.com/reference/android/net/wifi/ScanResult apInfo) ` Add the non-802.11mc and non-802.11az capable device specified by the `https://developer.android.com/reference/android/net/wifi/ScanResult` to the list of devices with which to measure range. |
| ` https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest.Builder` | ` https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest.Builder#addNon80211mcCapableAccessPoints(java.util.List<android.net.wifi.ScanResult>)(https://developer.android.com/reference/java/util/List<https://developer.android.com/reference/android/net/wifi/ScanResult> apInfos) ` Add the non-802.11mc and non-802.11az capable devices specified by the `https://developer.android.com/reference/android/net/wifi/ScanResult` to the list of devices with which to measure range. |
| ` https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest.Builder` | ` https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest.Builder#addResponder(android.net.wifi.rtt.ResponderConfig)(https://developer.android.com/reference/android/net/wifi/rtt/ResponderConfig responder) ` Add the Responder device specified by the `https://developer.android.com/reference/android/net/wifi/rtt/ResponderConfig` to the list of devices with which to measure range. |
| ` https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest.Builder` | ` https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest.Builder#addResponders(java.util.List<android.net.wifi.rtt.ResponderConfig>)(https://developer.android.com/reference/java/util/List<https://developer.android.com/reference/android/net/wifi/rtt/ResponderConfig> responders) ` Add the devices specified by the `https://developer.android.com/reference/android/net/wifi/rtt/ResponderConfig`s to the list of devices with which to measure range. |
| ` https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest.Builder` | ` https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest.Builder#addWifiAwarePeer(android.net.MacAddress)(https://developer.android.com/reference/android/net/MacAddress peerMacAddress) ` Add the device specified by the `peerMacAddress` to the list of devices with which to measure range. |
| ` https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest.Builder` | ` https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest.Builder#addWifiAwarePeer(android.net.wifi.aware.PeerHandle)(https://developer.android.com/reference/android/net/wifi/aware/PeerHandle peerHandle) ` Add a device specified by a `https://developer.android.com/reference/android/net/wifi/aware/PeerHandle` to the list of devices with which to measure range. |
| ` https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest` | ` https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest.Builder#build()() ` Build `https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest` given the current configurations made on the builder. |
| ` https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest.Builder` | ` https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest.Builder#setRttBurstSize(int)(int rttBurstSize) ` Set the RTT Burst size for the ranging request. |
| ` https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest.Builder` | ` https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest.Builder#setSecurityMode(int)(int securityMode) ` Sets the overall security mode for ranging, determining if secure ranging is attempted with each responder and if fallback to unauthenticated secure ranging is permitted. |

| ### Inherited methods |
|---|---|
| From class ` https://developer.android.com/reference/java/lang/Object ` |---|---| | ` https://developer.android.com/reference/java/lang/Object` | ` https://developer.android.com/reference/java/lang/Object#clone()() ` Creates and returns a copy of this object. | | ` boolean` | ` https://developer.android.com/reference/java/lang/Object#equals(java.lang.Object)(https://developer.android.com/reference/java/lang/Object obj) ` Indicates whether some other object is "equal to" this one. | | ` void` | ` https://developer.android.com/reference/java/lang/Object#finalize()() ` Called by the garbage collector on an object when garbage collection determines that there are no more references to the object. | | ` final https://developer.android.com/reference/java/lang/Class<?>` | ` https://developer.android.com/reference/java/lang/Object#getClass()() ` Returns the runtime class of this `Object`. | | ` int` | ` https://developer.android.com/reference/java/lang/Object#hashCode()() ` Returns a hash code value for the object. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#notify()() ` Wakes up a single thread that is waiting on this object's monitor. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#notifyAll()() ` Wakes up all threads that are waiting on this object's monitor. | | ` https://developer.android.com/reference/java/lang/String` | ` https://developer.android.com/reference/java/lang/Object#toString()() ` Returns a string representation of the object. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#wait(long,%20int)(long timeoutMillis, int nanos) ` Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*, or until a certain amount of real time has elapsed. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#wait(long)(long timeoutMillis) ` Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*, or until a certain amount of real time has elapsed. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#wait()() ` Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*. | ||

## Public constructors

### Builder

Added in [API level 28](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public Builder ()
```

<br />

<br />

## Public methods

### addAccessPoint

Added in [API level 28](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public RangingRequest.Builder addAccessPoint (ScanResult apInfo)
```

Add the device specified by the `https://developer.android.com/reference/android/net/wifi/ScanResult` to the list of devices with
which to measure range. The total number of peers added to a request cannot exceed the
limit specified by `https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest#getMaxPeers()`.


Two-sided Ranging will be performed if the local device and the AP support IEEE 802.11az
(non-trigger based ranging) or IEEE 802.11mc. AP capability is determined by the method
`https://developer.android.com/reference/android/net/wifi/ScanResult#is80211azNtbResponder()` or `https://developer.android.com/reference/android/net/wifi/ScanResult#is80211mcResponder()`.

If both 11az and 11mc are supported by the local device and the AP, 11az non-trigger
based ranging will be performed.

If two-sided ranging is not supported, one-sided RTT will be performed with no
correction for the AP packet turnaround time.

<br />

| Parameters ||
|---|---|
| `apInfo` | `ScanResult`: Information about an Access Point (AP) obtained in a Scan Result. This value cannot be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest.Builder` | The builder to facilitate chaining `builder.setXXX(..).setXXX(..)`. This value cannot be `null`. <br /> |

### addAccessPoints

Added in [API level 28](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public RangingRequest.Builder addAccessPoints (List<ScanResult> apInfos)
```

Add the devices specified by the `https://developer.android.com/reference/android/net/wifi/ScanResult`s to the list of devices with
which to measure range. The total number of peers added to a request cannot exceed the
limit specified by `https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest#getMaxPeers()`.


Two-sided Ranging will be performed if the local device and the AP support IEEE 802.11az
(non-trigger based ranging) or IEEE 802.11mc. AP capability is determined by the method
`https://developer.android.com/reference/android/net/wifi/ScanResult#is80211azNtbResponder()` or `https://developer.android.com/reference/android/net/wifi/ScanResult#is80211mcResponder()`.

If both 11az and 11mc are supported by the local device and the AP, 11az non-trigger
based ranging will be performed.

If two-sided ranging is not supported, one-sided RTT will be performed with no
correction for the AP packet turnaround time.

<br />

| Parameters ||
|---|---|
| `apInfos` | `List`: Information about Access Points (APs) obtained in a Scan Result. This value cannot be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest.Builder` | The builder to facilitate chaining `builder.setXXX(..).setXXX(..)`. This value cannot be `null`. <br /> |

### addNon80211mcCapableAccessPoint

Added in [API level 31](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public RangingRequest.Builder addNon80211mcCapableAccessPoint (ScanResult apInfo)
```

Add the non-802.11mc and non-802.11az capable device specified by the `https://developer.android.com/reference/android/net/wifi/ScanResult`
to the list of devices with which to measure range. The total number of peers added to a
request cannot exceed the limit specified by `https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest#getMaxPeers()`.


Accurate ranging cannot be supported if the Access Point does not support IEEE 802.11mc
and IEEE 802.11az, and instead an alternate protocol called one-sided RTT will be used
with lower accuracy. Use `https://developer.android.com/reference/android/net/wifi/ScanResult#is80211mcResponder()` to verify the Access
Point(s) are not 802.11mc capable. Use `https://developer.android.com/reference/android/net/wifi/ScanResult#is80211azNtbResponder()` ()} to
verify the Access Point)s) are not 802.11az capable.


One-sided RTT does not subtract the RTT turnaround time at the Access Point, which can
add hundreds of meters to the estimate. With experimentation, it is possible to use this
information to make a statistical estimate of the range by taking multiple measurements
to several Access Points and normalizing the result. For some applications this can be
used to improve range estimates based on Receive Signal Strength Indication (RSSI), but
will not be as accurate as IEEE 802.11mc (two-sided RTT).


Note: one-sided RTT should only be used if you are very familiar with statistical
estimation techniques.

<br />

| Parameters ||
|---|---|
| `apInfo` | `ScanResult`: Information about an Access Point (AP) obtained in a Scan Result. This value cannot be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest.Builder` | The builder to facilitate chaining `builder.setXXX(..).setXXX(..)`. This value cannot be `null`. <br /> |

### addNon80211mcCapableAccessPoints

Added in [API level 31](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public RangingRequest.Builder addNon80211mcCapableAccessPoints (List<ScanResult> apInfos)
```

Add the non-802.11mc and non-802.11az capable devices specified by the `https://developer.android.com/reference/android/net/wifi/ScanResult`
to the list of devices with which to measure range. The total number of peers added to a
request cannot exceed the limit specified by `https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest#getMaxPeers()`.


Accurate ranging cannot be supported if the Access Point does not support IEEE 802.11mc
and IEEE 802.11az, and instead an alternate protocol called one-sided RTT will be used
with lower accuracy. Use `https://developer.android.com/reference/android/net/wifi/ScanResult#is80211mcResponder()` to verify the Access
Point(s) are not 802.11mc capable. Use `https://developer.android.com/reference/android/net/wifi/ScanResult#is80211azNtbResponder()` ()} to
verify the Access Point(s) are not 802.11az capable.


One-sided RTT does not subtract the RTT turnaround time at the Access Point, which can
add hundreds of meters to the estimate. With experimentation, it is possible to use this
information to make a statistical estimate of the range by taking multiple measurements
to several Access Points and normalizing the result. For some applications this can be
used to improve range estimates based on Receive Signal Strength Indication (RSSI), but
will not be as accurate as IEEE 802.11mc (two-sided RTT).


Note: one-sided RTT should only be used if you are very familiar with statistical
estimation techniques.

<br />

| Parameters ||
|---|---|
| `apInfos` | `List`: Information about Access Points (APs) obtained in a Scan Result. This value cannot be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest.Builder` | The builder to facilitate chaining `builder.setXXX(..).setXXX(..)`. This value cannot be `null`. <br /> |

### addResponder

Added in [API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public RangingRequest.Builder addResponder (ResponderConfig responder)
```

Add the Responder device specified by the `https://developer.android.com/reference/android/net/wifi/rtt/ResponderConfig` to the list of devices
with which to measure range. The total number of peers added to the request cannot exceed
the limit specified by `https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest#getMaxPeers()`.


Two-sided Ranging will be performed if the local device and the AP support IEEE 802.11az
(non-trigger based ranging) or IEEE 802.11mc. AP capability is determined by the method
`https://developer.android.com/reference/android/net/wifi/ScanResult#is80211azNtbResponder()` or `https://developer.android.com/reference/android/net/wifi/ScanResult#is80211mcResponder()`.

If both 11az and 11mc are supported by the local device and the AP, 11az non-trigger
based ranging will be performed.

If two-sided ranging is not supported, one-sided RTT will be performed with no
correction for the AP packet turnaround time.

<br />

| Parameters ||
|---|---|
| `responder` | `ResponderConfig`: Information on the RTT Responder. This value cannot be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest.Builder` | The builder, to facilitate chaining `builder.setXXX(..).setXXX(..)`. This value cannot be `null`. <br /> |

### addResponders

Added in [API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public RangingRequest.Builder addResponders (List<ResponderConfig> responders)
```

Add the devices specified by the `https://developer.android.com/reference/android/net/wifi/rtt/ResponderConfig`s to the list of devices with
which to measure range. The total number of peers added to a request cannot exceed the
limit specified by `https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest#getMaxPeers()`.


Two-sided Ranging will be performed if the local device and the AP support IEEE 802.11az
(non-trigger based ranging) or IEEE 802.11mc. AP capability is determined by the method
`https://developer.android.com/reference/android/net/wifi/ScanResult#is80211azNtbResponder()` or `https://developer.android.com/reference/android/net/wifi/ScanResult#is80211mcResponder()`.

If both 11az and 11mc are supported by the local device and the AP, 11az non-trigger
based ranging will be performed.

If two-sided ranging is not supported, one-sided RTT will be performed with no
correction for the AP packet turnaround time.

<br />

| Parameters ||
|---|---|
| `responders` | `List`: Information representing the set of access points to be ranged. This value cannot be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest.Builder` | The builder to facilitate chaining `builder.setXXX(..).setXXX(..)`. This value cannot be `null`. <br /> |

### addWifiAwarePeer

Added in [API level 28](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public RangingRequest.Builder addWifiAwarePeer (MacAddress peerMacAddress)
```

Add the device specified by the `peerMacAddress` to the list of devices with
which to measure range.


The MAC address may be obtained out-of-band from a peer Wi-Fi Aware device. A Wi-Fi
Aware device may obtain its MAC address using the `https://developer.android.com/reference/android/net/wifi/aware/IdentityChangedListener`
provided to
`https://developer.android.com/reference/android/net/wifi/aware/WifiAwareManager#attach(android.net.wifi.aware.AttachCallback,%20android.net.wifi.aware.IdentityChangedListener,%20android.os.Handler)`.


Note: in order to use this API the device must support Wi-Fi Aware
`https://developer.android.com/reference/android/net/wifi/aware/package-summary`. The peer device which is being ranged to must be
configured to publish a service (with any name) with:
- Type `https://developer.android.com/reference/android/net/wifi/aware/PublishConfig#PUBLISH_TYPE_UNSOLICITED`.
- Ranging enabled `https://developer.android.com/reference/android/net/wifi/aware/PublishConfig.Builder#setRangingEnabled(boolean)`.

  <br />

  <br />

  | Parameters ||
  |---|---|
  | `peerMacAddress` | `MacAddress`: The MAC address of the Wi-Fi Aware peer. This value cannot be `null`. <br /> |

  | Returns ||
  |---|---|
  | `https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest.Builder` | The builder, to facilitate chaining `builder.setXXX(..).setXXX(..)`. <br /> |

### addWifiAwarePeer

Added in [API level 28](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public RangingRequest.Builder addWifiAwarePeer (PeerHandle peerHandle)
```

Add a device specified by a `https://developer.android.com/reference/android/net/wifi/aware/PeerHandle` to the list of devices with which to
measure range.


The `https://developer.android.com/reference/android/net/wifi/aware/PeerHandle` may be obtained as part of the Wi-Fi Aware discovery process. E.g.
using `https://developer.android.com/reference/android/net/wifi/aware/DiscoverySessionCallback#onServiceDiscovered(android.net.wifi.aware.PeerHandle,%20byte[],%20java.util.List<byte[]>)`.


Note: in order to use this API the device must support Wi-Fi Aware
`https://developer.android.com/reference/android/net/wifi/aware/package-summary`. The requesting device can be either publisher or
subscriber in a discovery session. For both requesting device and peer device ranging
must be enabled on the discovery session:
- `https://developer.android.com/reference/android/net/wifi/aware/PublishConfig.Builder#setRangingEnabled(boolean)` for publisher.
- `https://developer.android.com/reference/android/net/wifi/aware/SubscribeConfig.Builder#setEgressDistanceMm(int)` or `https://developer.android.com/reference/android/net/wifi/aware/SubscribeConfig.Builder#setIngressDistanceMm(int)` must be set to enable ranging on subscriber

| Parameters ||
|---|---|
| `peerHandle` | `PeerHandle`: The peer handler of the peer Wi-Fi Aware device. This value cannot be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest.Builder` | The builder, to facilitate chaining `builder.setXXX(..).setXXX(..)`. <br /> |

### build

Added in [API level 28](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public RangingRequest build ()
```

Build `https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest` given the current configurations made on the
builder.

<br />

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest` | <br /> |

### setRttBurstSize

Added in [API level 31](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public RangingRequest.Builder setRttBurstSize (int rttBurstSize)
```

Set the RTT Burst size for the ranging request.


If not set, the default RTT burst size given by
`https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest#getDefaultRttBurstSize()` is used to determine the default value.
If set, the value must be in the range `https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest#getMinRttBurstSize()` and
`https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest#getMaxRttBurstSize()` inclusively, or a
`https://developer.android.com/reference/java/lang/IllegalArgumentException` will be thrown.

Note: RTT burst size is primarily applicable to IEEE 802.11mc, but it can also
be used with IEEE 802.11az to generate multiple NTB ranging requests per
measurement. This is used when multiple very rapid range measurements are
needed to improve accuracy during motion, without the overhead of a new
application level ranging request.

<br />

| Parameters ||
|---|---|
| `rttBurstSize` | `int`: The number of FTM packets, or NTB repetitions, used to estimate a range. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest.Builder` | The builder to facilitate chaining `builder.setXXX(..).setXXX(..)`. This value cannot be `null`. <br /> |

### setSecurityMode

Added in [API level 36](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public RangingRequest.Builder setSecurityMode (int securityMode)
```

Sets the overall security mode for ranging, determining if secure ranging is attempted
with each responder and if fallback to unauthenticated secure ranging is permitted. The
mode also permits retry with no security when secure ranging fails. If not set, default
mode will be `https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest#SECURITY_MODE_OPPORTUNISTIC`.


See `SECURITY_MODE_*` for different modes of operation.

<br />

| Parameters ||
|---|---|
| `securityMode` | `int`: security mode for ranging. Value is one of the following: - `https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest#SECURITY_MODE_OPEN` - `https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest#SECURITY_MODE_OPPORTUNISTIC` - `https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest#SECURITY_MODE_SECURE_AUTH` |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/net/wifi/rtt/RangingRequest.Builder` | The builder, to facilitate chaining `builder.setXXX(..).setXXX(..)`. This value cannot be `null`. <br /> |