Interact with the application on the Android device

  1. Create a service connection.

    Connecting to the first available peer found:

    try {
      var agent = await Samsung.Sap.Agent.GetAgent(Samsung.Sap.Service.Profiles.First());
      var peers = await agent.FindPeers(null);
      if (peers.Count() == 0)
        Console.WriteLine("There are no peers to connect to.");
        var peer = peers.First();
        await peer.Connection.Open();
        peer.Connection.Send(agent.Channels.First().Value, System.Text.Encoding.ASCII.GetBytes("Hello"));
    } except (Exception exc) {
      Console.WriteLine("Communication failure: " + exc.Message);
    Handling of an incomming connection:
    Samsung.Sap.Agent agent = null;
    agent = await Samsung.Sap.Agent.GetAgent("/my/profile", onConnect: con =>
        if (con.Peer.ProfileVersion == agent.ProfileVersion)
          con.DataReceived += (s, e) => {
            Console.WriteLine($"Received {e.Data.Length} bytes from {e.Peer.DeviceName}/{e.Channel.ID}");
          return true; // accept connection from peers with the same profile version as ours
          return false; // reject other connections
  2. Disconnect the service.

    Connection between Peers can be closed by calling Connection.Close() method.

  3. Send a message.

    In this sample text message is sent using Peer.SendMessage(). In contrast to sending data using Connection.Send() method establishing connection between Peers is not required.

        await peer.SendMessage(Encoding.UTF8.GetBytes("Hello Message"));
  4. Receive a message.

    Receiving message from remote Peer is handled by OnMessage callback set before.

    private async void OnMessage(Peer peer, byte[] content)
      string message = Encoding.UTF8.GetString(content) + " Time: " + DateTime.Now.ToShortTimeString();
      await peer.SendMessage(Encoding.UTF8.GetBytes(message));

    In this case, app replies to a receiving command from remote Accessory Peer Agent in Smart device by providing the current time stamp.