3

I am building an app that should connect at least 4 devices using nearby connection api. I am able to connect them intermittently, other wise only two devices are getting connected.

I am using P2P-CLUSTER Topology and sending data as file payloads which are successfully sent. I have two questions:

  1. Any suggestion on how to have a stable connection among 2+ devices.
  2. While sending data as file payloads, a folder is created in the download folder. Is there any way to discard this step and be able to send data directly as file payloads without having to save them locally.

Here is my code regarding the connection part only.

  private final EndpointDiscoveryCallback endpointDiscoveryCallback =
        new EndpointDiscoveryCallback() {
            @Override
            public void onEndpointFound(String endpointId, final DiscoveredEndpointInfo info) {

                arrlist.add(endpointId);
                for (int i = 0; i< arrlist.size(); i++) {
                    connectionsClient
                            .requestConnection(Build.MODEL, arrlist.get(i), connectionLifecycleCallback)
                            .addOnSuccessListener(new OnSuccessListener<Void>() {
                                @Override
                                public void onSuccess(Void aVoid) {
                                }
                            })
                            .addOnFailureListener(new OnFailureListener() {
                                @Override
                                public void onFailure(@NonNull Exception e) {
                                }
                            });
                }
            }

            @Override
            public void onEndpointLost(@NonNull String endpointId) {
            }
        };


private final ConnectionLifecycleCallback connectionLifecycleCallback =
        new ConnectionLifecycleCallback() {
            @Override
            public void onConnectionInitiated(@NonNull String endpointId, @NonNull ConnectionInfo connectionInfo) {
                // Automatically accept the connection on both sides.
                connectionsClient.acceptConnection(endpointId, new PayloadCallback() {
                    @Override
                    public void onPayloadReceived(@NonNull String s, @NonNull Payload payload) {
                        }
                    }

                    @Override
                    public void onPayloadTransferUpdate(@NonNull String s, @NonNull PayloadTransferUpdate payloadTransferUpdate) {

            }

            @Override
            public void onConnectionResult(@NonNull String endpointId, ConnectionResolution result) {
                switch (result.getStatus().getStatusCode()) {
                    case ConnectionsStatusCodes.STATUS_OK:
                        if(arrlist != null && arrlist.contains(endpointId)){
                            System.out.println(TAG+ " End Point Found");
                        } else {
                            arrlist.add(endpointId);
                        }

                        connectionsClient.stopDiscovery();
                        connectionsClient.stopAdvertising();
                        break;
                    case ConnectionsStatusCodes.STATUS_CONNECTION_REJECTED:
                        // Some code 
                        break;
                    case ConnectionsStatusCodes.STATUS_ERROR:
                        // Some code
                        break;
                    default:
                }
            }

            @Override
            public void onDisconnected(@NonNull String endpointId) {
             // some code
            }
        };

  private void startAdvertising() {
    AdvertisingOptions advertisingOptions =
            new AdvertisingOptions.Builder().setStrategy(STRATEGY).build();
    Nearby.getConnectionsClient(context)
            .startAdvertising(
                    android.os.Build.MODEL, getPackageName(), connectionLifecycleCallback, advertisingOptions)
            .addOnSuccessListener(new OnSuccessListener<Void>() {
                @Override
                public void onSuccess(Void aVoid) {

                }
            })
            .addOnFailureListener(new OnFailureListener() {
                                      @Override
                                      public void onFailure(@NonNull Exception e) {

                                      }
                                  });
}

private void startDiscovery() {
    DiscoveryOptions discoveryOptions =
            new DiscoveryOptions.Builder().setStrategy(STRATEGY).build();
    Nearby.getConnectionsClient(context)
            .startDiscovery(getPackageName(), endpointDiscoveryCallback, discoveryOptions)
            .addOnSuccessListener(new OnSuccessListener<Void>() {
                                      @Override
                                      public void onSuccess(Void aVoid) {
                                      }
                                  })
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                }
            });
}
Sammy T
  • 1,924
  • 1
  • 13
  • 20
Laura
  • 73
  • 1
  • 6

0 Answers0