投放广告和探索

用户授予所有必需权限后,您的应用就可以开始投放广告并发现设备,以便查找附近的设备。

首先,为您的用例选择 Strategy。您选择的 Strategy 可确定您的应用的连接拓扑(一个广告客户对应 N 个发现者,M 个广告客户对应 N 个发现者)。

在将要通告的设备上,使用想要的 Strategy 和用于标识应用的 serviceId 参数调用 startAdvertising()

在将发现附近广告客户的设备上,请使用相同的 StrategyserviceId 调用 startDiscovery()

serviceId 值必须能唯一标识您的应用。最佳实践是,使用应用的软件包名称(例如 com.google.example.myapp)。

以下示例展示了如何投放广告:

private void startAdvertising() {
  AdvertisingOptions advertisingOptions =
      new AdvertisingOptions.Builder().setStrategy(STRATEGY).build();
  Nearby.getConnectionsClient(context)
      .startAdvertising(
          getLocalUserName(), SERVICE_ID, connectionLifecycleCallback, advertisingOptions)
      .addOnSuccessListener(
          (Void unused) -> {
            // We're advertising!
          })
      .addOnFailureListener(
          (Exception e) -> {
            // We were unable to start advertising.
          });
}

ConnectionLifecycleCallback 参数是当探索器请求连接到广告客户时调用的回调函数。如需详细了解如何定义此回调,请参阅管理连接

以下示例展示了如何发现:

private void startDiscovery() {
  DiscoveryOptions discoveryOptions =
      new DiscoveryOptions.Builder().setStrategy(STRATEGY).build();
  Nearby.getConnectionsClient(context)
      .startDiscovery(SERVICE_ID, endpointDiscoveryCallback, discoveryOptions)
      .addOnSuccessListener(
          (Void unused) -> {
            // We're discovering!
          })
      .addOnFailureListener(
          (Exception e) -> {
            // We're unable to start discovering.
          });
}

EndpointDiscoveryCallback 参数是当发现附近的广告客户或失去附近的广告客户时,系统将调用的回调函数。如需详细了解如何定义此回调,请参阅管理连接

如果您不再需要通告,请调用 stopAdvertising();如果您不再需要发现广告,请调用 stopDiscovery()