2012-05-02 18 views
10

¿Cómo puedo transferir datos entre dos dispositivos? Me gustaría transferir datos (principalmente archivos de imágenes) entre diferentes plataformas (Android, iPhone). ¿Es posible usar p2p o debería usar cliente-servidor?¿Cómo transferir "datos" entre dos dispositivos (Android, iPhone)?

Cualquier ayuda será apreciada.

+0

android2android es posible ver para la demo de BTchat. Pero BT en Iphone no está diseñado para este uso. –

+0

¿Qué mecanismo desea hacer tal transferencia? BlueTooth, wifi, internet: ¿alguno de los anteriores? – halfer

+0

Quiero transferir datos a través de Internet usando 3G o wifi. –

Respuesta

5

Mientras p2p es posible en algunos casos, va a lograr la compatibilidad más amplia con una arquitectura cliente-servidor, a costa de tener que desplegar, el poder , conecta y mantiene servidores.

  • Usted será capaz de utilizar los dos puntos de acceso WiFi y móvil (3G, etc.) redes
  • Usted tiene un lugar preparado en el sistema para medir (o restringir) el uso y/o insertar anuncios
  • No tiene que preocuparse por los firewalls que bloquean las conexiones entrantes a los dispositivos (común en wifi, casi siempre en el móvil)
  • Las ubicaciones relativas de los dispositivos son irrelevantes
  • Puede interoperar no solo con teléfonos inteligentes y tabletas, pero con PC y laptops tradicionales
+0

¿Qué pasa con el rendimiento de p2p y cliente-servidor? ¿Cuál tiene mejor rendimiento? –

+1

El rendimiento es cero si una de las ideas no funciona en las situaciones en que se necesita. Donde ambas ideas funcionarán, puedes apoyar ambas. –

13

¿Has mirado Qualcomm's AllJoyn library? Funciona solo por Bluetooth o wifi.

El código siguiente se copia de este 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(); 
     } 
    } 

} 
6

Si está de acuerdo con Bump, proporcionan una API para que lo usen los desarrolladores y es bastante fácil de usar. Check this out.

Para ver una demostración en vivo de la transferencia entre iOS y Android @youtube.

Fragmento de código detallado y ejemplo en Github.

PD: no pertenezco a bu.mp :).

+0

Gracias por su respuesta. Conozco a Bump pero no quiero usarlo. Estoy tratando de descubrir cómo funciona. –

+0

Idea de nivel superior: http://bu.mp/faq – Futur

2

Usaría un servicio web. Eso hace que sea más fácil mantener su servicio, ya que la implementación del servicio es independiente de su aplicación.

Pro servicio web:

  • alcanzable bajo una pre configurado DNS
  • modificaciones en el servicio no afectará a la aplicación (no hay cambios necesarios en las posibles correcciones de errores)

Contra servicio web:

  • Todo el tráfico pasa por su servidor
  • aplicación se basa en el servidor de

El que debe plantearse la cuestión, la cantidad de datos se transfiere en su comunicación? ¿Hay un beneficio real de usar conexiones directas?

0

Puede usar filehub para transferir archivos entre IOS y Android.

hay un nuevo dispositivo llamado fielhub en el mercado que puede transferir fotos/películas/música entre dispositivos iOS y Android, o entre dispositivos móviles y tarjetas SD/USB HDD .. Creo que se llama ravpower filehub.

Cuestiones relacionadas