Как передать "данные" между двумя устройствами (Android, iphone)?

Как я могу передавать данные между двумя устройствами? Я хотел бы передать данные (в основном файл изображений) между различными платформами (Android, iphone). Можно ли использовать p2p или использовать клиент-сервер?

Любая помощь будет оценена.

Ответ 1

В то время как p2p в некоторых случаях возможно, вы получите самую распространенную совместимость с архитектурой клиент-сервер за счет необходимости развертывания, питания, подключения и обслуживания серверов.

  • Вы сможете использовать как точки доступа Wi-Fi, так и мобильные (3g и т.д.) сети.
  • У вас есть готовое место в системе для измерения (или ограничения) использования и/или вставки объявлений
  • Вам не нужно беспокоиться о том, что брандмауэры блокируют входящие подключения к устройствам (обычно на Wi-Fi, почти всегда на мобильных устройствах).
  • Относительное расположение устройств не имеет значения.
  • Вы можете взаимодействовать не только со смартфонами и планшетами, но и с традиционными ПК и ноутбуками.

Ответ 2

Вы просмотрели Qualcomm AllJoyn library? Он работает только через Bluetooth или Wi-Fi.

Нижеприведенный код скопирован из этого Включает программирование сокетов в ваши приложения

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

Если вы в порядке с Bump, тогда они предоставляют API для разработчиков и довольно просты в использовании. Проверьте это.

Чтобы увидеть живую демонстрацию передачи между iOS и Android @youtube.

Подробный фрагмент кода и пример в Github.

PS: я не принадлежит bu.mp:).

Ответ 4

Я бы использовал WebService. Это упрощает обслуживание вашего сервиса, потому что реализация сервиса не зависит от вашего приложения.

Pro Webservice:

  • Доступно для предварительно настроенного DNS
  • Изменения в Сервисе не влияют на приложение (нет обновлений, необходимых для возможных исправлений)

Contra Webservice:

  • Весь трафик проходит через ваш сервер
  • Приложение зависит от вашего сервера.

Вы должны задать себе вопрос, сколько данных передано в вашем сообщении? Есть ли реальная польза от использования прямых подключений?

Ответ 5

Вы можете использовать filehub для передачи файлов между IOS и Android.

есть новое устройство под названием fielhub на рынке, которое может передавать фотографии/фильмы/музыку между iOS и Android-устройствами или между мобильными устройствами и SD-картой/USB-накопителем. Я думаю, что это называется файлом ravpower filehub.