Подтвердить что ты не робот

Каковы хорошие способы (существующие) для передачи данных между несколькими мобильными телефонами без Интернета?

Фон

У меня есть идея для приложения в отпуске, которому нужно общаться с другими телефонами с тем же приложением. В то время как в отпуске эти телефоны могут не все иметь интернет, поскольку роуминг может быть очень дорогим. Данные не так много: например, 500 кбайт макс было бы достаточно (в json).

В каждом телефоне есть информация, которую хотели бы узнать обо всех других телефонах, но если это поможет, информация может быть сохранена на 1 телефоне (главный телефон с этого момента) и позже будет передаваться другим телефонам, когда они вернутся домой интернет.

Телефоны

Android, iPhone и Windows Phone Мы не можем предположить, что у них есть NFC, IR или zigbee. Просто аппаратное обеспечение почти каждого телефона имеет Bluetooth, камеру, микрофон и т.д.

Мои идеи

  • QR-коды, которые меняются в зависимости от новой информации: если первый телефон сканируется, второй телефон QR-код имеет данные от 1-го телефона и сам, а третий телефон имеет данные от 1-го, 2-го и 3-го (сам по себе), пока не достигнет этого основного телефона, который содержит все данные.

  • Передача данных через звук, который мы не слышим (или можем). Кон - это то, что я не знаю, существует ли что-то подобное для мобильных платформ и написано это как трехлетний магистерский проект.

  • Bluetooth. Можем ли мы подключиться, как 8 устройств? Будет ли он работать согласованно (подключение даже моих наушников может быть затруднительным, около 8 телефонов, которые пытаются подключиться одновременно).

Все эти идеи имеют большие минусы. Может быть, я упускаю из виду лучший способ.

Я добавлю щедрость на вопрос о наилучшем решении Ответ, который объясняет это немного ссылкой на код (ссылка в порядке) всегда лучше, чем просто: "использовать bluetooth man"

4b9b3361

Ответ 1

TL; DR

Самый простой (и наиболее поддерживаемый) способ подключения нескольких устройств к подключению друг к другу - использование WiFi. Поскольку ваша цель - добиться передачи данных без Интернета, наиболее привлекательным решением будет использование структуры Peer-to-Peer.

Две основные ОС смартфона (Android и iOS) имеют API и документацию по созданию и передаче данных по сети одноранговой сети.

Эти два также имеют средства для шифрования передаваемых данных.

У Windows, похоже, нет API, позволяющего подключать несколько одноранговых узлов, но их Proximity Class будет работать для одного устройства за раз.


Я могу дать несколько контуров по различным параметрам в каждой основной ОС:


Android

API Wi-Fi P2P (peer-to-peer) был создан для передачи данных без Интернета или другой сети.

Из их документации:

API-интерфейсы Wi-Fi peer-to-peer (P2P) позволяют приложениям подключаться к соседним устройствам без необходимости подключения к сети или точке доступа (платформа Android Wi-Fi P2P соответствует программе сертификации Wi-Fi Direct ™), Wi-Fi P2P позволяет вашему приложению быстро находить и взаимодействовать с близлежащими устройствами в диапазоне возможностей Bluetooth.

Google даже имеет Документация и training на этот API.


IOS

Apple Multipeer Connectivity.

Очень похоже на Android P2P API, они утверждают:

Структура Multipleer Connectivity обеспечивает поддержку для обнаружения услуг, предоставляемых соседними устройствами iOS с использованием инфраструктурных сетей Wi-Fi, одноранговых сетей Wi-Fi и персональных сетей Bluetooth и последующей связи с этими службами путем отправки данных на основе сообщений, потоковые данные и ресурсы (например, файлы).

Ниже приведен пример достойного поиска при использовании Multipeer Connectivity.

- EDIT -

Другой способ iOS сделать это, что является немного неправильным использованием (?) инструмента, заключается в использовании GameKit.

Однако, я думаю, что для того, чтобы заставить его работать для ваших целей, это может привести к небольшому взлому, поскольку "игроки" должны использовать Game Center.


для Windows

Единственный способ (по-видимому) подключиться к телефонам в Windows Phone - это использовать Proximity, однако это дает вам возможность подключения не более двух телефонов.

Они заявляют:

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


Это опции в каждой из основных ОС мобильных устройств.

Использование приложения может быть примерно таким:

  • Определите, какое устройство будет "мастером", чтобы другие устройства могли подключиться к нему. Об этом не нужно знать, прежде чем развертывать приложение, но должен быть способ для пользователя решить, будет ли он быть клиентом (получающим данные) или сервером (нажатие данных).

  • После того, как было принято решение между группой устройств, которые будут толкать данные, это устройство должно быть зарегистрировано как сервер (в API Android P2P вы можете установить "владелец группы" ) а затем начните искать сверстников, инициализируя службу.

  • Затем, как только устройства подключены к главному устройству, вы можете начать нажимать данные. Дополнительным преимуществом является то, что при использовании Android WiFi P2P вся связь шифруется с помощью WPA2, а с iOS вы можете включить шифрование с помощью MCEnableEncryption (однако они указывают, что это замедляет скорость передачи данных).

Теперь вам просто нужно выбрать один из методов, чтобы убедиться, что все телефоны работают под управлением ОС. Поскольку эти три метода подключения не будут работать вместе.

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

Дополнительная помощь может быть предоставлена, если вопрос сужен по конкретным проблемам, но для этого вам должно быть достаточно данных.

Ответ 2

Не пытайтесь использовать QR или звук. Я думаю, было бы очень больно передавать 500 кб данных. Bluetooth кажется хорошим решением, но, возможно, как вы уже сказали, трудно настроить.

Что вы думаете о wifi?
По крайней мере, каждое устройство Android и iPhone может создать мобильную точку доступа Wi-Fi. Используя это, вы можете легко настроить среду, в которой 8 устройств находятся в одной локальной сети (без использования Интернета на любом из ваших устройств).

Теперь ваш "главный телефон" запускает простой сервер для синхронизации данных (как это сделал бы интернет-сервер). Каждый из семи клиентов мог получить IP-адрес вашего хозяина, сканировав простой QR-код или отправив короткое сообщение, а затем настройте его соответствующим образом.

Ответ 3

Вы отметили Alljoyn?

Как указано:

"Разработчики могут писать приложения для взаимодействия независимо от транспортного уровня, производителя и без необходимости доступа в Интернет"

Ответ 4

Вы можете создать Wi-Fi-соединение между устройствами. После подключения он создает локальную сеть между вашими устройствами. Конечно, внутри этой сети вы можете взаимодействовать между вашими устройствами, используя TCP/IP-соединение. Он работает как на Android, так и на iOS. Просто запустите приложение в качестве сервера на одном устройстве

ИЗМЕНИТЬ Обратите внимание: вам нужно подключать свои устройства в любой сети. Можно подключить устройства, инициализируя устройство как WiFi-маршрутизатор. Это могут быть как Android, так и iOS. Если это возможно, вы можете подключить свои устройства к любому Wi-Fi-соединению. Затем запустите приложение как Server-socket, другие - как клиенты. для Android (Java) используйте эту ссылку: https://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html

try ( 
    ServerSocket serverSocket = new ServerSocket(portNumber);
    Socket clientSocket = serverSocket.accept();
    PrintWriter out =
        new PrintWriter(clientSocket.getOutputStream(), true);
    BufferedReader in = new BufferedReader(
        new InputStreamReader(clientSocket.getInputStream()));
) {

для клиента устройства Android:

try (
    Socket kkSocket = new Socket(hostName, portNumber);
    PrintWriter out = new PrintWriter(kkSocket.getOutputStream(), true);
    BufferedReader in = new BufferedReader(
        new InputStreamReader(kkSocket.getInputStream()));
)

То же самое касается iOS (Objective-C): сервер https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/NetworkingTopics/Articles/UsingSocketsandSocketStreams.html#//apple_ref/doc/uid/CH73-SW8

и клиент: https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/NetworkingTopics/Articles/UsingSocketsandSocketStreams.html#//apple_ref/doc/uid/CH73-SW4

Ответ 5

Лучшим способом может быть использование Ble.

Это облегчает подключение телефонов, потому что вам не требуется подтверждение пользователя.

Похоже, вы можете подключить до 20 устройств Максимальное количество периферийных устройств на CoreBluetooth?.

Для переноса 500 КБ потребуется несколько минут (может быть от 2 до 5).

Ответ 6

Вы можете отслеживать Android-устройство без Интернета через GPS.

Соединение без Интернета:

  • SMS

  • USSD

  • DTMF (очень медленно)

Как создать устройство отслеживания USSD, упомянутое в Поваренная книга M2M IoT

Как разработать устройство на основе беспроводных сетевых сетей

Вы также можете использовать телефон Android в качестве регистратора данных и хранить его под картой Micro SD и читать карту:

  • Замена SD-карты на ПК

  • Потоковая передача данных локально по Bluetooth

  • Пересылка данных дома Wi-Fi

Или возможно:

Ваше приложение может использовать SMS API для передачи данных или других ИСТОЧНИКОВ.