How to transfer "data" between two device (android,iphone)?

12,223

Solution 1

While p2p is possible in some cases, you will achieve the most widespread compatibility with a client-server architecture, at the cost of having to deploy, power, connect, and maintain servers.

  • You will be able to use both wifi access points and mobile (3g, etc) networks
  • You have a ready place in the system to measure (or restrict) usage and/or insert ads
  • You don't have to worry about firewalls blocking inbound connections to the devices (common on wifi, almost always the case on mobile)
  • Relative locations of the devices are irrelevant
  • You can interoperate not only with smartphones and tablets, but with traditional PCs and laptops

Solution 2

Have you looked at Qualcomm's AllJoyn library? It works over Bluetooth or wifi only.

The below code is copied from this Incorporating Socket Programming into your Applications

public class ServerActivity extends Activity {

    private TextView serverStatus;

    // default ip
    public static String SERVERIP = "10.0.2.15";

    // designate a port
    public static final int SERVERPORT = 8080;

    private Handler handler = new Handler();

    private ServerSocket serverSocket;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.server);
        serverStatus = (TextView) findViewById(R.id.server_status);

        SERVERIP = getLocalIpAddress();

        Thread fst = new Thread(new ServerThread());
        fst.start();
    }

    public class ServerThread implements Runnable {

        public void run() {
            try {
                if (SERVERIP != null) {
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            serverStatus.setText("Listening on IP: " + SERVERIP);
                        }
                    });
                    serverSocket = new ServerSocket(SERVERPORT);
                    while (true) {
                        // listen for incoming clients
                        Socket client = serverSocket.accept();
                        handler.post(new Runnable() {
                            @Override
                            public void run() {
                                serverStatus.setText("Connected.");
                            }
                        });

                        try {
                            BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
                            String line = null;
                            while ((line = in.readLine()) != null) {
                                Log.d("ServerActivity", line);
                                handler.post(new Runnable() {
                                    @Override
                                    public void run() {
                                        // do whatever you want to the front end
                                        // this is where you can be creative
                                    }
                                });
                            }
                            break;
                        } catch (Exception e) {
                            handler.post(new Runnable() {
                                @Override
                                public void run() {
                                    serverStatus.setText("Oops. Connection interrupted. Please reconnect your phones.");
                                }
                            });
                            e.printStackTrace();
                        }
                    }
                } else {
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            serverStatus.setText("Couldn't detect internet connection.");
                        }
                    });
                }
            } catch (Exception e) {
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        serverStatus.setText("Error");
                    }
                });
                e.printStackTrace();
            }
        }
    }

    // gets the ip address of your phone's network
    private String getLocalIpAddress() {
        try {
            for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
                NetworkInterface intf = en.nextElement();
                for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
                    InetAddress inetAddress = enumIpAddr.nextElement();
                    if (!inetAddress.isLoopbackAddress()) { return inetAddress.getHostAddress().toString(); }
                }
            }
        } catch (SocketException ex) {
            Log.e("ServerActivity", ex.toString());
        }
        return null;
    }

    @Override
    protected void onStop() {
        super.onStop();
        try {
             // make sure you close the socket upon exiting
             serverSocket.close();
         } catch (IOException e) {
             e.printStackTrace();
         }
    }

}

Solution 3

If you are OK with Bump, Then they provide an API for the developers to use and its pretty simple to use. Check this out.

To see a live demo of transferring between iOS and Android @ youtube.

Detailed code snippet and example in Github.

PS: i don't belong to bu.mp :).

Solution 4

I would use a WebService. That makes it easier to maintain your service, becuase the Service Implementation is independent of your app.

Pro Webservice:

  • Reachable under a pre configured DNS
  • Modifications on the Service do not affect the Application (No updates needed on possible bugfixes)

Contra Webservice:

  • All the traffic goes through your Server
  • Application relies on your Server

The you should ask yourself the question, how much data is transferred in your communication? Is there a real benefit of using direct connections?

Share:
12,223
Parvin Gasimzade
Author by

Parvin Gasimzade

Currently, I'm a Sr.Software Development Engineer at Amazon, London/UK Tech: Java, Spring, Nosql, MongoDB, Solr, ElasticSearch, Python, Big Data, Spark/EMR, AWS Linkedin Profile

Updated on June 05, 2022

Comments

  • Parvin Gasimzade
    Parvin Gasimzade about 2 years

    How can i transfer data between two device? I would like to transfer data (mostly image file) between different platforms (android,iphone). Is it possible to use p2p or should i use client-server?

    Any help will be appreciated.

  • Parvin Gasimzade
    Parvin Gasimzade about 12 years
    What about performance of the p2p and client-server? Which one has better performance?
  • Parvin Gasimzade
    Parvin Gasimzade about 12 years
    Thanks for your answer.I know Bump but i don't want to use it.I am trying to figure out how the it is working.
  • Chris Stratton
    Chris Stratton about 12 years
    Performance is zero if one of the ideas won't work in the situations where it is needed. Where both ideas will work, you can support both.
  • Rohit Mandiwal
    Rohit Mandiwal over 4 years
    The page is no longer exist.
  • Rohit Mandiwal
    Rohit Mandiwal over 4 years
    Bump is no longer exist.