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

 ̄綄美尐妖づ 提交于 2019-12-03 06:59:48

问题


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.


回答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



回答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();
         }
    }

}



回答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 :).




回答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?




回答5:


You can use filehub to transfer files between IOS and android.

there is a new device called fielhub on the market can transfer photos/movies/music between iOS and Android Devices, or between mobile devices and SD Card/USB HDD.. I think it is called ravpower filehub.



来源:https://stackoverflow.com/questions/10414273/how-to-transfer-data-between-two-device-android-iphone

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!