Nearby Connections supports different Strategies for advertising and discovery.
The best
Strategy
to use depends on the use case.
P2P_CLUSTER
P2P_CLUSTER
is a peer-to-peer strategy that supports an M-to-N, or
cluster-shaped, connection topology. In other words, this enables connecting
amorphous clusters of devices within radio range (~100m), where each device can
both initiate outgoing connections to M other devices and accept incoming
connections from N other devices.
This is the default strategy, equivalent to calling the deprecated Connections API methods with no Strategy parameter.
This strategy is more flexible in its topology constraints than P2P_STAR
,
but results in lower bandwidth connections. It is good for use cases with
smaller payloads that require a more mesh-like experience, such as multiplayer
gaming.
Permissions
In order to use this Strategy, Location must be turned on and the app must have the following permissions declared:
- BLUETOOTH
- BLUETOOTH_ADMIN
- ACCESS_WIFI_STATE
- CHANGE_WIFI_STATE
- ACCESS_COARSE_LOCATION
On devices running Q (and onwards), FINE_LOCATION is required in place of COARSE location.
- ACCESS_FINE_LOCATION
On devices running S (and onwards), replace BLUETOOTH and BLUETOOTH_ADMIN permissions with the following:
- BLUETOOTH_ADVERTISE
- BLUETOOTH_CONNECT
- BLUETOOTH_SCAN
Additionally, on devices running T (and onwards), NEARBY_WIFI_DEVICES is required in place of ACCESS_COARSE_LOCATION and ACCESS_FINE_LOCATION.
- NEARBY_WIFI_DEVICES
P2P_STAR
P2P_STAR
is a peer-to-peer strategy that supports a 1-to-N, or star-shaped,
connection topology. In other words, this enables connecting devices within
radio range (~100m) in a star shape, where each device can, at any given time,
play the role of either a hub (where it can accept incoming connections from N
other devices), or a spoke (where it can initiate an outgoing connection to a
single hub), but not both.
This strategy lends itself best to situations where there is one device advertising, and N devices which discover the advertiser, though you may still advertise and discover simultaneously if required.
This strategy is more strict in its topology constraints than P2P_CLUSTER
, but
results in higher bandwidth connections. It is good for high-bandwidth use cases
such as sharing a video to a group of friends.
Permissions
In order to use this Strategy, Location must be turned on and the app must have the following permissions declared:
- BLUETOOTH
- BLUETOOTH_ADMIN
- ACCESS_WIFI_STATE
- CHANGE_WIFI_STATE
- ACCESS_COARSE_LOCATION
On devices running Q (and onwards), FINE_LOCATION is required in place of COARSE location.
- ACCESS_FINE_LOCATION
On devices running S (and onwards), replace BLUETOOTH and BLUETOOTH_ADMIN permissions with the following:
- BLUETOOTH_ADVERTISE
- BLUETOOTH_CONNECT
- BLUETOOTH_SCAN
Additionally, on devices running T (and onwards), NEARBY_WIFI_DEVICES is required in place of ACCESS_COARSE_LOCATION and ACCESS_FINE_LOCATION.
- NEARBY_WIFI_DEVICES
P2P_POINT_TO_POINT
P2P_POINT_TO_POINT
is a peer-to-peer strategy that supports a 1-to-1
connection topology. In other words, this enables connecting devices within
radio range (~100m) with the highest possible throughput, but does not allow
for more than a single connection at a time.
This strategy lends itself best to situations where transferring data is more important than the flexibility of maintaining multiple connections.
This strategy is more strict in its topology constraints than P2P_STAR
, but
results in higher bandwidth connections. It is good for high-bandwidth use cases
such as sharing a large video to another device.
Permissions
In order to use this Strategy, Location must be turned on and the app must have the following permissions declared:
- BLUETOOTH
- BLUETOOTH_ADMIN
- ACCESS_WIFI_STATE
- CHANGE_WIFI_STATE
- ACCESS_COARSE_LOCATION
On devices running Q (and onwards), FINE_LOCATION is required in place of COARSE location.
- ACCESS_FINE_LOCATION
On devices running S (and onwards), replace BLUETOOTH and BLUETOOTH_ADMIN permissions with the following:
- BLUETOOTH_ADVERTISE
- BLUETOOTH_CONNECT
- BLUETOOTH_SCAN
Additionally, on devices running T (and onwards), NEARBY_WIFI_DEVICES is required in place of ACCESS_COARSE_LOCATION and ACCESS_FINE_LOCATION.
- NEARBY_WIFI_DEVICES