5
votes

I want to create an application to exchange information between 2 devices via NFC.

I know how to make one mobile send information to the other using Android Beam. What I don't know is how two phones could send data to each other with just one touch.

Is this possible? If yes, how?

2

2 Answers

4
votes

That depends on what you are trying to achieve and what Android version(s) you are using:

Both devices with Android < 4.0

Both devices can send one NDEF message each with no user interaction required. The messages cannot depend on each other (i.e. it's not possible that one device sends a message and the other one sends an answer to this). You would use a combination of enableForegroundNdefPush() and enableForegroundDispatch() to achieve this.

At least one device with Android < 4.4

Both devices can (theoretically) send one NDEF message per touch, but user interaction is required on both devices (i.e. the user needs to touch the Beam UI). Moreover the Beam UI on both devices needs to be touched pretty much at the same time. Otherwise, the Beam UI on the other device will get interrupted due to the received NDEF message. Thus, this "solution" is not really usable. You would use a combination of setNdefPushMessage*() and enableForegroundDispatch() to achieve this.

Both devices with Android 4.4+

Starting with version 4.4, Android has two new features:

When you combine those feature (i.e. you have a HCE on-host card emulation service on one device and put the second device into reader mode), both devices can communicate with each other (real bi-directional communication) using ISO 7816-4 APDUs.

0
votes

This is possible, as explained online here. There is also an API demo in the API demos provided with the SDK that discusses this.

However, keep in mind that NFC has a very small payload size, and you're unlikely to be able to transfer any sizable data using it. NFC should instead be used to quickly setup bluetooth connections, or another form of wireless transfer like WiFi direct, which can then be used to transfer larger amounts of data.