Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What are good ways (existing) to transmit data between multiple mobile phones without internet?

Background

I have an idea for an app on vacation that needs to communicate to other phones with the same app. While on vacation those phones might not all have internet as roaming can be very expensive. The data is not a lot: like 500 kB max would suffice (in json).

Every phone has a bit of info that all the other phones would like to know, but if it helps the info can be stored on 1 phone (master phone from now on) and shared later to the other phones when back home over internet.

Phones

Android, iPhone and Windows Phone We can't assume they have NFC, IR or zigbee. Just the hardware almost every phone has like bluetooth, camera, microphone etc.

My ideas

  • QR codes that changes, based on new info: If the first phone is scanned the second phones QR code has data from the 1st phone and itself and the 3rd phone has data from the 1st, 2nd and 3rd (itself) until it reaches that master phone that holds all data.

  • Data transmission trough sound that we can't hear (or we can). Con is that I don't know if something like this exists for mobile platforms and writing it is like a 3 year master thesis project.

    • http://nearbytes.com

    • https://applidium.com

    • https://developer.chirp.io/

  • Bluetooth. Can we connect like 8 devices? Would it work consistent (connecting even my headphones can be a hassle, what about 8 phones who try to connect simultaneously)

All of these ideas have big cons. Maybe I'm overlooking a better way.

I will add a bounty to the question for the best solution An answer that explains it with a little bit of code reference (link is ok) is always better than just: "use bluetooth man"

like image 581
online Thomas Avatar asked Feb 09 '16 10:02

online Thomas


People also ask

How can I transfer data between two phones without internet?

Use an offline file sharing app. They usually work by turning your device into what's essentially a Wi-Fi hotspot, just without the internet. The app that works best for you depends on which type of device you use: AirDrop (Apple iOS) Google Files (Windows or Android)

Can data be transferred between phones?

You can move your data to a new Android device from another kind of device, or start fresh with your new Android device.

How can I use another phones data without a hotspot?

Share mobile data through Bluetooth Open phone “Settings” on the home screen or in the menu. Access “Networks and Internet”. Choose “WiFi Zone / Connection Sharing”. Select “Share via Bluetooth”.


1 Answers

TL;DR

The easiest (and most supported) way of getting multiple devices to connect to each other is using WiFi. Since your goal is to achieve data transfer with no internet, the most appealing solution would be to use a Peer-to-Peer network structure.

The two major smartphone OS's (Android and iOS) have API's and documentation on creating and transferring data over a Peer-to-Peer network.

  • Android WiFi P2P

  • Apple Multipeer Connectivity

These two also have a means to encrypt the data being transferred.

Windows doesn't seem to have an API to allow multiple peers connected, but their Proximity Class will work for one device at a time.


I can give a few outlines over the different options in each major OS:


Android

Android's WiFi P2P (peer-to-peer) API was created for transferring data without internet or another network.

From their documentation:

The Wi-Fi peer-to-peer (P2P) APIs allow applications to connect to nearby devices without needing to connect to a network or hotspot (Android's Wi-Fi P2P framework complies with the Wi-Fi Direct™ certification program). Wi-Fi P2P allows your application to quickly find and interact with nearby devices, at a range beyond the capabilities of Bluetooth.

Google even has Documentation and training on this API.


iOS

Apple's Multipeer Connectivity.

Very similar to Android's P2P API, they claim:

The Multipeer Connectivity framework provides support for discovering services provided by nearby iOS devices using infrastructure Wi-Fi networks, peer-to-peer Wi-Fi, and Bluetooth personal area networks and subsequently communicating with those services by sending message-based data, streaming data, and resources (such as files).

Here is a decent looking tutorial on using Multipeer Connectivity.

--EDIT--

Another iOS way of doing this, which is a bit of a mis-utilization(?) of the tool, is by using GameKit.

However, I think that to get it to work for your purposes might result in a bit of a hack, since the "players" have to be using Game Center.


Windows

The only way (apparently) to connect phones in Windows Phone, is by using Proximity, however, that only gives you the option of connecting no more than two phones together.

They state:

Proximity is a great way to create a shared app experience between two instances of your app running on two different devices.


Those are options in each of the major mobile device OS's.

App usage could be something like:

  • Decide which device was going to be the "master", so that other devices can connect to it. It isn't required to know this before deploying the app, but there should be a way for the user to decide whether he is going to be a client (receiving data) or the server (pushing data).

  • Once it was decided between the group of devices which was going to be pushing data, that device would have to be registered as the server (in the Android P2P API, you can establish a "group owner"), and then start looking for peers by initializing the service.

  • Then, once the devices are connected to the master device, you can start pushing data. An additional bonus is that when using Android WiFi P2P, all communication is encrypted with WPA2, and with iOS, you can enable encryption using MCEnableEncryption (however they state that is slows down data transfer rate).

Now you would just have to pick one method to go with, and make sure that all the phones ran that OS. Because these three methods of connectivity won't work together.

All of the three methods listed are done programmatically, so there should be no strange or odd things that your user will have to do. Searching for other devices, connecting, and transferring data can all be done within your app.

More help can be provided if the question is narrowed down to specific problems, but this should be enough data to get you started.

like image 154
CaptJak Avatar answered Sep 21 '22 06:09

CaptJak