Pesan Singkat

Pengguna dapat memublikasikan dan berlangganan pesan melalui NearbyConnections API Android. Pengguna Nearby Message dapat menyesuaikan desain mereka saat ini dengan Nearby Connections melalui contoh di bawah ini. Untuk penggunaan yang lebih mendetail tentang Koneksi Di Sekitar, lihat Ringkasan Nearby Connections API.

Nearby Connections memungkinkan kliennya mengirim data dalam 131 byte tanpa membuat koneksi ke perangkat jarak jauh. Lihat alur di bawah ini untuk mengetahui cara mentransfer pesan dalam 131 byte.

Penayang

private void startPublishing() {
  // Using the default advertising option is enough since  connecting is not required.
  AdvertisingOptions advertisingOptions = new AdvertisingOptions.Builder().build();
  Nearby.getConnectionsClient(context)
      .startAdvertising(getMessagesInBytes(), SERVICE_ID, connectionLifecycleCallback, advertisingOptions)
      .addOnSuccessListener(
          (Void unused) -> {
            // We're advertising!
          })
      .addOnFailureListener(
          (Exception e) -> {
            // We were unable to start advertising.
          });
}
// To manage incoming connections from the subscriber.
// In this flow since we are not establishing connections between the two devices, we could
// ignore the implementation.
private final ConnectionLifecycleCallback connectionLifecycleCallback =
    new ConnectionLifecycleCallback() {
      @Override
      public void onConnectionInitiated(String endpointId, ConnectionInfo connectionInfo) {}

      @Override
      public void onConnectionResult(String endpointId, ConnectionResolution result) {}

      @Override
      public void onDisconnected(String endpointId) {}
    };
private void stopPublishing() {
  // Stop advertising when done.
  Nearby.getConnectionsClient(context).stopAdvertising();
  Nearby.getConnectionsClient(context).stopAllEndpoints();
}

Subscriber

private void startSubscription() {
  // Using the default discovery option is enough since connection is not required.
  DiscoveryOptions discoveryOptions = new DiscoveryOptions.Builder().build();
  Nearby.getConnectionsClient(context)
      // The SERVICE_ID value must uniquely identify your app.
      // As a best practice, use the package name of your app
      // (for example, com.google.example.myapp).
      .startDiscovery(SERVICE_ID, endpointDiscoveryCallback, discoveryOptions)
      .addOnSuccessListener(
          (Void unused) -> {
            // We're discovering!
          })
      .addOnFailureListener(
          (Exception e) -> {
            // We're unable to start discovering.
          });
}
private final EndpointDiscoveryCallback endpointDiscoveryCallback =
    new EndpointDiscoveryCallback() {
      @Override
      public void onEndpointFound(String endpointId, DiscoveredEndpointInfo info) {
        // A remote advertising endpoint is found.
        // To retrieve the published message data.
        byte[] message = info.getEndpointInfo();
      }

      @Override
      public void onEndpointLost(String endpointId) {
        // A previously discovered endpoint has gone away.
      }
    };
private void stopSubscription() {
  // Stop discovery when the subscription is done.
  Nearby.getConnectionsClient(context).stopDiscovery();
  Nearby.getConnectionsClient(context).stopAllEndpoints();
}

Pesan Panjang

Untuk pesan yang lebih besar dari 131 byte, koneksi antar perangkat harus dibuat untuk mentransfer pesan. Lihat alur di bawah untuk mengetahui cara mentransfer data besar menggunakan Koneksi Di Sekitar.

Penayang

private void startPublishing() {
  // Using P2P strategy for 1:1 connection.
  AdvertisingOptions advertisingOptions =
      new AdvertisingOptions.Builder().setStrategy(Strategy.P2P_POINT_TO_POINT).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.
          });
}
private final ConnectionLifecycleCallback connectionLifecycleCallback =
    new ConnectionLifecycleCallback() {
      @Override
      public void onConnectionInitiated(String endpointId, ConnectionInfo connectionInfo) {
        // Automatically accept the connection on both sides.
        Nearby.getConnectionsClient(context).acceptConnection(endpointId, payloadCallback);
      }

      @Override
      public void onConnectionResult(String endpointId, ConnectionResolution result) {
        switch (result.getStatus().getStatusCode()) {
          case ConnectionsStatusCodes.STATUS_OK:
            // We're connected! Can now start sending and receiving data.
            Payload bytesPayload = Payload.fromBytes(DATA_TO_BE_SENT);
            Nearby.getConnectionsClient(context).sendPayload(endpointId, bytesPayload);
            break;
          case ConnectionsStatusCodes.STATUS_CONNECTION_REJECTED:
            // The connection was rejected by one or both sides.
            break;
          case ConnectionsStatusCodes.STATUS_ERROR:
            // The connection broke before it was able to be accepted.
            break;
          default:
            // Unknown status code
        }
      }

      @Override
      public void onDisconnected(String endpointId) {
        // We've been disconnected from this endpoint. No more data can be
        // sent or received.
      }
    };
private void stopPublishing() {
  // Stop advertising when done.
  Nearby.getConnectionsClient(context).stopAdvertising();
  Nearby.getConnectionsClient(context).stopAllEndpoints();
}

Subscriber

private void startSubscription() {
  DiscoveryOptions discoveryOptions =
      new DiscoveryOptions.Builder().setStrategy(Strategy.P2P_POINT_TO_POINT).build();
  Nearby.getConnectionsClient(context)
      .startDiscovery(SERVICE_ID, endpointDiscoveryCallback, discoveryOptions)
      .addOnSuccessListener(
          (Void unused) -> {
            // We're discovering!
          })
      .addOnFailureListener(
          (Exception e) -> {
            // We're unable to start discovering.
          });
}
private final EndpointDiscoveryCallback endpointDiscoveryCallback =
    new EndpointDiscoveryCallback() {
      @Override
      public void onEndpointFound(String endpointId, DiscoveredEndpointInfo info) {
        // An endpoint was found. We request a connection to it.
        Nearby.getConnectionsClient(context)
            .requestConnection(getLocalUserName(), endpointId, connectionLifecycleCallback)
            .addOnSuccessListener(
                (Void unused) -> {
                  // We successfully requested a connection. Now both sides
                  // must accept before the connection is established.
                })
            .addOnFailureListener(
                (Exception e) -> {
                  // Nearby Connections failed to request the connection.
                });
      }

      @Override
      public void onEndpointLost(String endpointId) {
        // A previously discovered endpoint has gone away.
      }
    };
private final ConnectionLifecycleCallback connectionLifecycleCallback =
    new ConnectionLifecycleCallback() {
      @Override
      public void onConnectionInitiated(String endpointId, ConnectionInfo connectionInfo) {
        // Automatically accept the connection on both sides.
        Nearby.getConnectionsClient(context).acceptConnection(endpointId, payloadCallback);
      }

      @Override
      public void onConnectionResult(String endpointId, ConnectionResolution result) {
        switch (result.getStatus().getStatusCode()) {
          case ConnectionsStatusCodes.STATUS_OK:
            // We're connected! Can now start sending and receiving data.
            break;
          case ConnectionsStatusCodes.STATUS_CONNECTION_REJECTED:
            // The connection was rejected by one or both sides.
            break;
          case ConnectionsStatusCodes.STATUS_ERROR:
            // The connection broke before it was able to be accepted.
            break;
          default:
            // Unknown status code
        }
      }

      @Override
      public void onDisconnected(String endpointId) {
        // We've been disconnected from this endpoint. No more data can be
        // sent or received.
      }
    };
static class ReceiveBytesPayloadListener extends PayloadCallback {
  @Override
  public void onPayloadReceived(String endpointId, Payload payload) {
    // This always gets the full data of the payload. Is null if it's not a BYTES payload.
    if (payload.getType() == Payload.Type.BYTES) {
      byte[] receivedBytes = payload.asBytes();
    }
  }

  @Override
  public void onPayloadTransferUpdate(String endpointId, PayloadTransferUpdate update) {
    // Bytes payloads are sent as a single chunk, so you'll receive a SUCCESS update immediately
    // after the call to onPayloadReceived().
  }
}
private void stopSubscription() {
  // Stop discovery when the subscription is done.
  Nearby.getConnectionsClient(context).stopDiscovery();
  Nearby.getConnectionsClient(context).stopAllEndpoints();
}