2012-05-02 22 views
10

Làm cách nào để chuyển dữ liệu giữa hai thiết bị? Tôi muốn chuyển dữ liệu (chủ yếu là tập tin hình ảnh) giữa các nền tảng khác nhau (android, iphone). Có thể sử dụng p2p hoặc tôi nên sử dụng máy khách-máy chủ?Làm thế nào để chuyển "dữ liệu" giữa hai thiết bị (android, iphone)?

Mọi trợ giúp sẽ được đánh giá cao.

+0

android2android có thể xem cho bản demo BTchat. Nhưng BT trong Iphone không được thiết kế để sử dụng. –

+0

Bạn muốn chuyển giao cơ chế nào? BlueTooth, wifi, internet - bất kỳ điều nào ở trên? – halfer

+0

Tôi muốn chuyển dữ liệu qua internet bằng 3G hoặc wifi. –

Trả lời

5

Trong khi p2p là có thể trong một số trường hợp, bạn sẽ đạt được khả năng tương thích phổ biến nhất với một kiến ​​trúc client-server, với chi phí của việc phải triển khai, điện , kết nối và duy trì máy chủ.

  • Bạn sẽ có thể sử dụng cả các điểm truy cập wifi và điện thoại di động (3g, vv) mạng
  • Bạn có một vị trí sẵn sàng trong hệ thống đo lường (hoặc hạn chế) sử dụng và/hoặc chèn quảng cáo
  • Bạn không phải lo lắng về tường lửa chặn các kết nối gửi đến các thiết bị (phổ biến trên wifi, hầu như luôn luôn như vậy trên thiết bị di động)
  • Vị trí tương đối của các thiết bị không liên quan
  • Bạn có thể tương thích không chỉ với điện thoại thông minh và máy tính bảng, nhưng với PC và máy tính xách tay truyền thống
+0

Điều gì về hiệu năng của máy chủ p2p và máy khách? Cái nào có hiệu suất tốt hơn? –

+1

Hiệu suất bằng không nếu một trong các ý tưởng không hoạt động trong các tình huống cần thiết. Khi cả hai ý tưởng đều hoạt động, bạn có thể hỗ trợ cả hai. –

13

Bạn đã xem Qualcomm's AllJoyn library chưa? Nó hoạt động qua Bluetooth hoặc chỉ wifi.

Mã dưới đây được sao chép từ này 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

Nếu bạn đồng ý với Bump, Sau đó, họ cung cấp API cho các nhà phát triển để sử dụng và nó khá đơn giản để sử dụng. Check this out.

Để xem bản trình diễn trực tiếp về chuyển giữa iOS và Android @youtube.

Đoạn mã chi tiết và ví dụ trong Github.

PS: tôi không thuộc về bu.mp :).

+0

Cảm ơn câu trả lời của bạn.Tôi biết Bump nhưng tôi không muốn sử dụng nó.Tôi đang cố gắng tìm ra cách thức hoạt động của nó. –

+0

Ý tưởng cấp cao hơn: http://bu.mp/faq – Futur

2

Tôi sẽ sử dụng WebService. Điều đó giúp bạn duy trì dịch vụ của mình dễ dàng hơn, bởi vì Việc triển khai dịch vụ độc lập với ứng dụng của bạn.

Pro Webservice:

  • thể truy cập dưới một DNS trước cấu hình
  • Modifications trên Dịch vụ không ảnh hưởng đến ứng dụng (Không có cập nhật cần thiết về sửa lỗi càng tốt)

Contra Webservice:

  • Tất cả lưu lượng truy cập đi qua Máy chủ
  • của bạn
  • Ứng dụng dựa trên Máy chủ của bạn

Bạn nên tự hỏi mình câu hỏi, lượng dữ liệu được truyền trong giao tiếp của bạn? Có lợi ích thực sự khi sử dụng kết nối trực tiếp không?

0

Bạn có thể sử dụng tệp để chuyển các tệp giữa iOS và Android.

có một thiết bị mới có tên là fielhub trên thị trường có thể truyền ảnh/phim/nhạc giữa thiết bị iOS và Android hoặc giữa các thiết bị di động và thẻ SD/USB HDD .. Tôi nghĩ nó được gọi là tập tin ravpower.

Các vấn đề liên quan