Bağlantıları yönet

Bağlantı başlatma

Yakındaki cihazlar bulunduğunda, keşif yapan kullanıcı bağlantı başlatabilir. İlgili içeriği oluşturmak için kullanılan Aşağıdaki örnekte, bir cihaz keşfedilir bulunmaz onunla bağlantı istenir.

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.
      }
    };

Kullanım alanınıza bağlı olarak, bunun yerine, tespit edilen cihazları kullanıcıya seçerek hangi cihazlara bağlanacaklarını seçme imkanı tanır.

Bağlantıyı kabul etme veya reddetme

Kaşif bir reklamverenle bağlantı isteğinde bulunduktan sonra, iki taraf da bağlantı başlatma işlemiyle ilgili olarak onConnectionInitiated() aracılığıyla bilgilendirildi. yöntemindeki ConnectionLifecycleCallback geri arama. Bu geri çağırmanın startAdvertising() adlı kullanıcıya iletildiğini unutmayın reklamveren ve requestConnection(), ancak bu noktadan itibaren API simetriktir.

Artık her iki taraf da bağlantıyı bir çağrı üzerinden kabul etmeyi veya reddetmeyi seçmelidir acceptConnection() veya rejectConnection() olarak değiştirildi. Bağlantı ancak her iki taraf da kabul ettiğinde tamamen oturacaktır. Biri veya her ikisi de reddederse bağlantı silindi. Her iki durumda da sonuç onConnectionResult()

Aşağıdaki kod snippet'inde bu geri çağırmanın nasıl uygulanacağı gösterilmektedir:

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.
      }
    };

Bu örnekte de bağlantı her iki tarafın da otomatik olarak kabul edildiğini gösterir, ancak kullanım alanınıza bağlı olarak kullanıcıya bu seçeneği bir şekilde sunmak isteyebilirsiniz.

Bağlantının kimliğini doğrulama

Bağlantı istendiğinde uygulamanız aşağıdaki bilgileri kullanarak bağlantının kimliğini doğrulayabilir: (onConnectionInitiated() adresine sağlanan kimlik doğrulama jetonu kullanılarak). Bu kullanıcıların, istenen sonuca bağlandıklarını onaylamalarını sağlar. olanak tanır. Her iki cihaza da aynı jeton verilir. Bu jeton, kısa bir rastgele dizedir; bunu nasıl doğrulayacağınıza siz karar verirsiniz. Bu süreç genelde hem de kullanıcılardan manuel olarak karşılaştırmalarını ve onaylamalarını istemek, Bluetooth eşleme iletişim kutusuna benzer.

Bu örnek kod, AlertDialog içindeki kullanıcıya kimlik doğrulama jetonu:

@Override
public void onConnectionInitiated(String endpointId, ConnectionInfo info) {
  new AlertDialog.Builder(context)
      .setTitle("Accept connection to " + info.getEndpointName())
      .setMessage("Confirm the code matches on both devices: " + info.getAuthenticationDigits())
      .setPositiveButton(
          "Accept",
          (DialogInterface dialog, int which) ->
              // The user confirmed, so we can accept the connection.
              Nearby.getConnectionsClient(context)
                  .acceptConnection(endpointId, payloadCallback))
      .setNegativeButton(
          android.R.string.cancel,
          (DialogInterface dialog, int which) ->
              // The user canceled, so we should reject the connection.
              Nearby.getConnectionsClient(context).rejectConnection(endpointId))
      .setIcon(android.R.drawable.ic_dialog_alert)
      .show();
}