Android Beam - передача полезной нагрузки с обоих устройств, когда только один Touch To Beam?

Хорошо, я посмотрел презентацию Google I/O от 2011 года по NFC на одноранговой сети.

Демонстрация была сделана на Gingerbread с использованием приложения Sticky Notes

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

На ICS и выше у вас есть Android Beam.

С Android Beam вам нужно коснуться, чтобы вызвать событие onNewIntent(), которое отправит сообщение NDef.

Теперь проблема заключается в том, что теперь, чтобы вызвать onNewIntent() на обоих устройствах, оба пользователя на каждом устройстве должны одновременно «Touch To Beam».

Есть ли способ, которым, когда вы Touch To Beam на одном устройстве, оба могут вызывать onNewIntent()?

Я пытаюсь разработать приложение, которое будет обмениваться данными друг с другом, но для того, чтобы оно работало в приятной дружественной манере, мне нужно, чтобы устройства одновременно обменивались данными после запуска Touch To Beam на одном устройстве. Я надеюсь, что это возможно.

Изменить: выглядит так это может быть невозможно :(


person Springy    schedule 24.03.2013    source источник


Ответы (4)


Насколько я могу судить, нужная вам функция недоступна через сам NFC. Передача Touch-to-Beam/SNEP/NPP осуществляется только в одном направлении на Android. Пользователь, который нажимает на свой экран, отправит сообщение NDEF на другой телефон.

Я полагаю, что в видео они установили соединение Bluetooth с сообщением NDEF для передачи (как вы видели в демо-версии stickynotes). К сожалению, для этого нет хорошего API.

Тем не менее, проект EasyNFC обещает позволить вам создать Bluetooth-соединение и сокет между двумя телефонами/приложениями. Проверьте это здесь

Я попробовал, и мне не очень понравился пользовательский интерфейс Touch-to-Beam, который все еще требовался при настройке соединения Bluetooth. Это также не очень соответствовало моим потребностям, так как я хотел перенести телефон на компьютер и не очень хотел реализовывать NFC P2P и соединение Bluetooth.

person Sam    schedule 24.05.2013
comment
Нет, это через NFC p2p и пряник работает нормально. 1. Если посмотреть в код, то видно, что это не блютуз, так как нет импортированных библиотек для блютуза, а во-вторых, вы не видите никаких ссылок на него. 2. Вы можете имитировать это на ICS выше, просто коснитесь, чтобы передать одновременно на обоих устройствах. Оно работает. На мой взгляд, сопряжение Bluetooth/Wifi — это хак. Для этого необходимо, чтобы оба Bluetooth-радио были включены. Все, что мне нужно, это небольшой пакет информации, который будет передаваться в обоих направлениях. Блютуз и вайфай просто перебор. Если бы я мог только отключить Android Beam, это сработало бы. - person Springy; 15.06.2013
comment
достаточно справедливо, я исправлен. я согласен, что нам нужна двусторонняя передача с NFC, но Google развлекается с GWallet, так что это может быть игра ожидания .... мне удалось довольно хорошо наладить двустороннюю связь между телефонами Android и компьютером, но он не будет работать между 2 телефонами. - person Sam; 17.06.2013

Вы пробовали следующее:
используйте Touch to Beam на телефоне 1, чтобы "ОТПРАВИТЬ" данные, а на другом (телефоне 2) используйте намерение NDEF_DISCOVERED/TECH_DISCOVERED для запуска/ начать сбор/прием данных. Я смутно припоминаю, что одно из вышеуказанных намерений срабатывало при выполнении PUSH. Хотя для каждой передачи требуется «Прикосновение», чтобы начать передачу.

person Joseph    schedule 25.03.2013
comment
Но приведенное выше просто переместит полезную нагрузку с телефона-1 на телефон-2. Я хочу подтолкнуть телефон-1 к телефону-2, а также телефон-2 к телефону-1. По сути, я хочу, чтобы оба устройства знали, что друг друга здесь, и хранили некоторые данные о каждом телефоне. - person Springy; 25.03.2013
comment
У вас есть состояние гонки, так как оба устройства будут пытаться нажать. Один выиграет право толкать. Эта группа может отключить луч, как только закончит. Тогда еще одна итерация даст вам то, что вы хотите. - person ThomasRS; 25.03.2013
comment
Дело в том, что вы действительно можете заставить его работать. Если обе стороны коснутся одновременно, это работает, как в видео на YouTube выше. Оба устройства получают полезную нагрузку друг друга. Это в основном то, что я хочу на самом деле. Я хочу, чтобы оба устройства могли обмениваться информацией друг с другом за одно взаимодействие. - person Springy; 26.03.2013

Если подумать в целом, Android не должен разрешать передачу данных NFC в обоих направлениях одновременно. Давайте подумаем о сценарии, в котором я хочу отправить что-то своему другу с помощью NFC. То, что активно открыто на телефоне моего друга, не важно. Я должен отправить эту вещь, даже если одно и то же приложение не открыто на стороне получателя. В телефоне моего друга может быть другое приложение, которое пытается отправить мне что-то другое. Когда мы прикасаемся к нашим телефонам, появляется Android Beam (TM), и данные отправляются с телефона, к которому прикасаются.

В вашем случае, я думаю, вам следует отключить Android Beam (TM), установив setNdefPushMessage(null), и выполнить отправку в обе стороны, используя старый способ.

person tasomaniac    schedule 08.07.2013
comment
Нет, вы не можете отключить его. Но есть примеры, когда вы хотите, чтобы оба телефона распознавали друг друга. Допустим, вы хотите подключиться через твиттер, поэтому вместо того, чтобы я давал свой твиттер-идентификатор, а ваш друг давал вам ваш твиттер-идентификатор, вы можете просто прикоснуться друг к другу телефонами вместе, и у вас обоих будет идентификатор друг друга. - person Springy; 03.08.2013
comment
Вы можете найти приведенное ниже объяснение в официальном документе JavaDoc ниже: Если setNdefPushMessage() вызывается с нулевым сообщением NDEF, то отправка NDEF будет полностью отключена для указанных действий. Это также отключает любое сообщение NDEF по умолчанию, которое ОС Android в противном случае отправила бы от вашего имени для этих действий. developer.android.com/reference/android/nfc/ - person tasomaniac; 05.08.2013

https://developer.android.com/preview/api-overview.html

Я думаю, что это будет доступно в L!!!

Усовершенствования NFC

Ваше приложение может вызывать Android Beam на устройстве пользователя для обмена данными, вызывая android.nfc.NfcAdapter.invokeBeam(). Это избавляет пользователя от необходимости вручную прикладывать устройство к другому устройству с поддержкой NFC для завершения передачи данных.

person Springy    schedule 21.09.2014
comment
Привет, правильная ссылка на android.nfc.NfcAdapter.invokeBeam() — это developer.android.com/reference/android/nfc/ - person Anchor; 24.05.2017
comment
Это показывает только экран касания для луча до того, как устройства окажутся в пределах досягаемости. Прочтите документацию по ссылке @Anchor: вызывая этот метод, Activity может вызывать анимацию Beam напрямую, даже если в радиусе действия еще нет другого устройства NFC. Затем анимация Beam предложит пользователю коснуться другого устройства с поддержкой NFC, чтобы завершить передачу данных. - person Rafa0809; 17.12.2017