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.
问题:
回答1:
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..
回答2:
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.
回答3:
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.
回答4:
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.
回答5:
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.
回答6:
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.
回答7:
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.
回答8:
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).