NFC programming without NFC chip in Tablets / Phones? - android

A short question but can't find no confirmation on other Forums. Hopefully someone knows on stackoverflow.
QUESTION: if I have a tablet that does not have a NFC chip inside, but I use an external NFC reader (With Android Support Library) connected to the tablet - can I still manipulate the data (read / write) from the NFC card (tapped on the external NFC reader) through my Application on Tablet ?
To me it seems possible, since the NFC reader has to do the reading and then I communicate with the reader through my Application. Since the reader supports Android Library, it should work. Please confirm.

Yes, this is possible. The ACR 122U download includes an Android SDK. I have published an Android util demonstrating some rudimentary functionality in Google play - ACR 122 USB NFC Reader Utils. I have also other apps for some of the other ACS readers, and a (paid) app aimed at developers doing proof of concept apps.

Related

Why Android & IOS11 cannot communicate via NFC

Currently using React Native and attempting to use react-native-nfc-ios and react-native-nfc so I can have cross-device communication between ios and Android. I'm finding that they cannot communicate, however I think it's due to a broader issue (as other existing apps also don't work).
If I download a NFC reader app on iPhone 7, and an NFC writer app on Android they cannot communicate. Why is this?
Instructions to Duplicate
Turn on NFC Reader on iPhone 7
Put some arbitrary data in NFC write mode on Android
Bringing devices together has no effect.
Not understanding the intricacies of NFC, it's hard for me as a casual programmer to understand what the actual problem is.
I understand that IOS11 on iPhone 7 (plus) supports NFC read, and generally speaking there are card emulation, peer to peer, and read write modes.
Should they not communicate? The iPhone is not able to pick up the
Android writer. Why is this?
How does card emulation (I assume to be Apple Pay), differ from a write mode?
The reason is because Apple's iOS 11 update only allows reading from NFC tags (writing is only permitted for Apple Pay). At the moment, their software does not share the same enjoyment afforded by Android phones which enable card emulation, peer-to-peer, and reader/writer NFC usage. So our only hope is to wait for a software update that will finally enable this existing feature for developers to use.

Android NFC with USB-NFC-Reader

I have an Android tablet with Android 4.2. This tablet does not have NFC hardware. However I have an external USB reader: ACR 1252U, that came with an Android library. This library unfortunately only gives me basic functionality - read and write Tags. Altough this is working quite well, it is not enough...
Because for my application I need to transfer files from my Android 4.2 tablet to other NFC devices (Android smartphones). So I need to put the NFC reader into peer-to-peer mode - which it supports. But how can I achive this with my setup? There indeed is an SDK for that reader, but it's Windows only.
Is it somehow possible, to use the built-in NFC-functions from Android with the external USB reader?
Is there another library for this reader, that supports peer-to-peer communication with other NFC-devices?
Is there another Hardware that I can use, to make this work?
Edit:
The linked question does NOT solve my problem:
It is 3.5 years old. On might think, that in meantime has changed a lot.
The answer to that question (= use the Android ACS library), is part of my own question... So it can't be the answer.
Is it somehow possible, to use the built-in NFC-functions from Android with the external USB reader?
No, that's not possible. If your Android devices did not ship with NFC, there simply is no built-in NFC functionality (not even on the software side). The Android NFC API is essentially an empty stub implementation that does nothing on such a device.
Is there another library for this reader, that supports peer-to-peer communication with other NFC-devices?
The library from ACS does not prevent you from accessing the reader's peer-to-peer capabilities, so I don't see why you would want to use a different library. See section 5.9 of the API specification on how to use the reader's peer-to-peer capabilities.
I need to transfer files from my Android 4.2 tablet to other Android NFC devices
Based on that request I assume that you want to use something like Android Beam to establish some fast out-of-band channel over NFC and then transfer the (large?) files over that out-of-band channel (e.g. WiFi or Bluetooth).
In that case, you would need to re-implement the Android Beam stack (NFC peer-to-peer mode + LLCP + Simple NDEF Exchange Protocol + establishing out-of-band communication channel + transfering file over that channel)

NFC device as a Reader for another Android HCE

I wanted to use my Android mobile as a reader to communicate to my android HCE(Host card EMulation) App. In internet I found the sample client application code for ACS Reader(PC Reader). Instead of that I would like to use my Android phone as a NFC Reader.
I found some sample for Mifare cards for Android, not for HCE communication
Please share If in case any sample code URL /API to help me for the same. Thank You
Not really sure what you are asking for, but here are two samples. One if for an Android NFC reader app and one is for an Android HCE app.
https://github.com/googlesamples/android-CardReader
https://github.com/googlesamples/android-CardEmulation
Please clarify your question if I did not understand you correctly.
CardReader
This sample demonstrates how to implement a low-level NFC card reader, for reading cards that do not contain NDEF or Android Beam data. This sample is designed to read the virtual loyalty card implemented in the CardEmulation sample.
In particular, this sample demonstrates how to disable Android Beam, select which AIDs the reader is interested in, and establish communication with the card. See Host-based Card Emulation for more information on the HCE APIs.
CardEmulation
This sample demonstrates how to emulate an NFC card, using the Host Card Emulation feature added in Android 4.4. This sample makes the device appear as a loyalty card whenever the screen is on and the user taps their device on an appropriately configured NFC reader.
The CardReader sample can be used to read the loyalty card implemented in this sample.
You can use an Android device (NFC+Kitkat onwards) in reader mode. Use NFCAdapter enableReaderMode function. This blog has complete sample.
Thanks
If I understand correclty your issue, you want to use one android device as an NFC reader to communicate with an HCE application installed on another android device. Am I right?
In this case, I do not think this is possible, because when you approach 2 NFC android devices, they will start to communicate in P2P.
In order to activate the CE mode on your "reading" device, you would need to deactivate the P2P feature, which is not possible if your phone is not rooted.

Android Application send tag to contacless reader ISO 14443 A or B device

Can everyone know how to build android nfc application which can send some information to reader device ISO 14443 A / B?
Thanks
P2P is possible. The most challenging is to find out the right libraries/SDK and the commercial quality reader. So far we have tried already 3 open-source solutions (nfclib, ISMB, etc.) and none of them is really ready for commercial system roll-out.Now we have ordered 2 other NFC readers and SDKs - we waiting for them to be delivered for them to test them:(
Also the problem is the phone side - so far we have tested 5 NFC Android phones and each of them is behaving differently... For us the best will be reader that emulates NFC tags or MIFARE chips...
Petr

How to Connect External NFC Card Reader to Tablet

Right now I am having Tablet having OS Android 2.3.3 instead of NFC phone,so I need to connect External card reader to tablet.Please tell me which card reader should I prefer and any driver needed to connect card reader to tablet.
The inbuilt NFC libraries support to that reader or not?
thanks in advance.
I found an answer,the ACS now provides android library and sample application for their readers.You can find library here and some information and video demo of android supported readers is here.
The only problem is that ACS android library supports only Android 3.1 and above.
hope it will help you.
If you still have question feel free to ask..
The built-in NFC library in Android 2.3 and 4.0 only supports the PN544 NFC chip by NXP Semiconductors. I don't think there are any card readers on the market that use it, as this chip is specifically designed for use in mobile devices. You may be able to find alternative implementations of the Android NFC API that support other NFC chips, though.
Another issue may be that your tablet most likely does not have the required NFC libraries installed, including the required system service (NfcManager). After all, your tablet has no NFC support, so it does not need these software components. So a new ROM system image would have to be created for your tablet that includes these software components.
Taking one of the many common desktop readers is probably not really feasible. Creating all the necessary software to integrate it into Android is not really a trivial task. It may be easier to just buy an Android phone with NFC or wait if an Android tablet with NFC comes out.
Neither Froyo 2.3 (min SDK version supporting NFC) or Ice Cream Sandwich 4.0 are compatible with a wide variety of chips.
When a manufacturer launch a new phone with a different NFC chip is because someone have created the drivers to use such chips and interface with Android's NFC classes, specifically the NfcManager class and the NfcAdapter class wich represents the local NFC adapter.
Best case scenario, you could use the Android NDK to create low level C/C++ classes to communicate somehow the External NFC Card reader with Android and then make more custom programming with the NDK to make the NfcAdapter on the SDK to detect it... and there are no warranties that you'll succeed.
And... if you are thinking about going to http://www.alibaba.com and import a tablet with NFC reader, think twice, because that ones might not allow you to do all what the NXP Semiconductors chip does with Android Beam (TM) such as Read/Write and support different I/O operations with NFC-A, B, F, V or ISO-DEP.
For your time's sake (and because time is the most valuable asset for anyone these days). I think your best option is to get a couple of NFC Phones such as the Galaxy Nexus S, DROID Razr, Xperia S, HTC Incredible, etc... those will work right out of the box, that's what we are doing.
Hey sachin,
Since your device doesn't have NFC, it won't have the NFC radio and hence it can not connect (Read or write) to an NFC card. According to the NFC lib, when ever you try to get NFCAdapter it will always return null.
so you atleast need an nfc enabled android device for any experiment.
In my project, we used ACR122 smart card reader that will be connect to a pc not android device.This reader is used to read any nfc tag. An nfc enabled android device will act as a nfc tag in card emulation mode.
Now next part of question "The inbuilt NFC libraries support to that reader or not".
so this card reader can read card value.
With a ACS NFC reader is it possible:
Here can you find the documentation for the libraries and example code. However it doesn't seem to have an option to write data. If you want to write to your NFC reader use the transmit function to send byte arrays.
private static final byte READ = (byte) 0x30;
private static final byte WRITE = (byte) 0xA2;
These bytes are the default read and write bytes for the transmit function. The full documentation of the default NFC protocol can be found here
example:
byte[] response = new byte[300];
int responseLength;
try {
responseLength = mReader.transmit(slotNum, command, command.length, response, response.length);
} catch (ReaderException e) {
e.printStackTrace();
return "executeCommand: error: " + e.getMessage();
}
Slotnum is the number of the reader you want to use. If I'm correct this is always 0 if you are using one reader/usbdevice.
example command:
new byte[] command {(byte) WRITE, 0x04, 0x06, 0x0a, 0x00, 0x21}
THE SECOND BYTE IS THE PAGE ADRES TO WRITE TO. Page 4 - 15 are writable (page 0 and 1 are the id, page 2 are lockbytes and page 3 are OTP. all of them are READ ONLY).
The Read function works the same as the WRITE function only send 3 times a 0x00 in the array for the correct read settings:
new byte[] command {(byte) READ, 0x04, 0x00, 0x00, 0x00}
THE SECOND BYTE IS THE PAGE ADRES TO READ.
Is this video answers to your problem : http://www.youtube.com/watch?v=6Xe7Ux0cTuI
"Low cost , Simple , No driver - EM4100 or Mifare RFID reader for Ipad , Android and Windows"
PS: I doesn't work to this compagny and never try their solution.
This is a good topic. I echo RacZo's concerns about NFC library support in the Alibaba sourced tablets. Since NFC chipsets in devices vary and some have dubious or no support for certain operations, you need to be careful and test out your app on those beforehand.
The ACS reader can be a cost effective solution, and there are some mature and well supported libraries and SDKs that support its integration with Android. The downside of the ACS external reader is battery life. Because it monopolizes the the USB port, and Android tablets won't allow charging through a USB port while a peripheral is connected to it. So if your application is some kind of kiosk or self serve app, this may be a problem.
There is a good post here about your various options when faced with this challenge. Without knowing more about your application it's tough to recommend one way or another.
A little late to answer here, but I've actually tried to implement an external NFC reader as close to native NFC as possible.
It is possible to add an additional service, but the regular NFC initialization (NfcAdapter etc) will not be aware of this service, so it will have to be initialized in addition.
The result was that it is not technically possible to replace or add the built-in NFC service on a stock ROM - in a 'drop-in-replacement-way'.
Reusing some of the native NFC classes like Tag and IsoDep is possible.
However as a developer of an NFC app, you really do not want the same functionality from the external service as the built-in. The external reader probably has more functionality and at a very minimum you want to know whether the reader is plugged in or not.
See External NFC API for additional information (note: it is not a fully open source product).

Categories

Resources