Hola;

Comento brevemente,
Tengo una aplicacion que lee los Tag Mifare UltraLight con el Nokia 6212 desarrollada en java ME

Es la siguiente:

import com.nokia.nfc.nxp.simpletag.SimpleTagConnection;
import javax.microedition.lcdui.Displayable;
import javax.microedition.contactless.ContactlessException;
import javax.microedition.contactless.DiscoveryManager;
import javax.microedition.contactless.TargetListener;
import javax.microedition.contactless.TargetProperties;
import javax.microedition.contactless.TargetType;
import javax.microedition.io.Connector;
import javax.microedition.lcdui.Choice;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.List;
import javax.microedition.lcdui.TextField;
import javax.microedition.lcdui.Ticker;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import javax.microedition.rms.RecordStore;
import javax.wireless.messaging.MessageConnection;
import javax.wireless.messaging.TextMessage;

public class MidletGestion extends MIDlet implements TargetListener, CommandListener {

protected void startApp() throws MIDletStateChangeException {
try {

//El discovery manager maneja la detección de tarjetas
DiscoveryManager dm = DiscoveryManager.getInstance();

// Le añadimos escuchadores para todos los tipos de tarjetas
dm.addTargetListener(this, TargetType.ISO14443_CARD);
dm.addTargetListener(this, TargetType.NDEF_TAG);
dm.addTargetListener(this, TargetType.RFID_TAG);
dm.addTargetListener(this, TargetType.VISUAL_TAG);
} catch (IllegalStateException e) {
// Catch IllegalStateException
} catch (ContactlessException e) {
// Catch ContactlessException
}
}

public void targetDetected(TargetProperties[] properties) {
/**
* IMPORTANTE: Las Mifare Ultralight utilizan una conexión SimpleTagConnection
* Es importante saber que si trabajamos con otro tipo de tarjetas como Mifare 1k/4k
* tendremos que crear una conexion de tipo MFStandardConnecion o NDEFTagConnection
*/
SimpleTagConnection conn = null;
try {
TargetProperties target = properties[0]; // always at least one target

//Abrimos la conexion con la tarjeta

conn = (SimpleTagConnection) Connector.open(target.getUrl(SimpleTagConnection.class));

//Leemos a partir de la 4 pagina, las 8 paginas siguientes
byte[] res = conn.read(4, 8);

//con los bytes leídos construimos una cadena de caracteres
codigo = "";
for (int i = 0; i < res.length; i++) {
codigo = codigo + (char) res[i];
}

//Hemos leido 32 caracteres, pero solo queremos los 9 primeros
codigo = codigo.substring(0, 8);
//mostramos lo leído en el cuadro de texto
textField.setString(codigo);

} catch (Exception e) {
textField.setString("Vuelva a escanear la etiqueta");
} finally {
closeQuietly(conn); //Importante: cerramos la conexion
}
}
}
/***************************************************/

Tambien tengo una aplicacion que copie de visual.net que lo que hace es leer con un lector ACR122 conectado por USB, en el ejemplo la aplicacion daba opciones a introducir las claves y demas, pero la deje más simple para que lo hiciera automaticamente.

'Private Sub bLoadKey_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bLoadKey.Click
Private Sub cargarClave()

'Dim tmpLong As Byte
Dim indx As Integer
Dim tmpStr As String


Call ClearBuffers()
'Load Authentication Keys command
SendBuff(0) = &HFF 'Class
SendBuff(1) = &H82 'INS
SendBuff(2) = &H0 'P1 : Key Structure
SendBuff(3) = CLng("&H" + "01") 'P2 : Key Number
SendBuff(4) = &H6 'P3 : Lc
SendBuff(5) = CLng("&H" + "FF") 'Key 1
SendBuff(6) = CLng("&H" + "FF") 'Key 2
SendBuff(7) = CLng("&H" + "FF") 'Key 3
SendBuff(8) = CLng("&H" + "FF") 'Key 4
SendBuff(9) = CLng("&H" + "FF") 'Key 5
SendBuff(10) = CLng("&H" + "FF") 'Key 6
'SendBuff(10) = CLng("&H" + tKey6.Text) 'Key 6

SendLen = 11
RecvLen = 2

retCode = SendAPDU()
If retCode <> ModWinsCard.SCARD_S_SUCCESS Then
Exit Sub
Else
For indx = RecvLen - 2 To RecvLen - 1

tmpStr = tmpStr + Microsoft.VisualBasic.Right("00" & Hex(RecvBuff(indx)), 2) + " "

Next indx
'Check for response
If tmpStr.Trim <> "90 00" Then

Call displayOut(4, 0, "Load authentication keys error!")

End If
End If

End Sub



'Private Sub bAuth_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bAuth.Click

Private Sub autentificar()

Dim tmpLong As Byte
Dim tempInt, indx As Integer
Dim tmpStr As String

Call ClearBuffers()
'Authentication command
SendBuff(0) = &HFF 'Class
SendBuff(1) = &H86 'INS
SendBuff(2) = &H0 'P1
SendBuff(3) = &H0 'P2
SendBuff(4) = &H5 'Lc
SendBuff(5) = &H1 'Byte 1 : Version number
SendBuff(6) = &H0 'Byte 2
If bloque = "01" Then
SendBuff(7) = CInt(bloque) 'Byte 3 : Block number
Else
SendBuff(7) = bloque 'CInt(bloque) 'Byte 3 : Block number
End If
'SendBuff(7) = CInt(tBlkNo.Text) 'Byte 3 : Block number

'If rbKType1.Checked = True Then
SendBuff(8) = &H60 'Byte 4 : Key Type A
'ElseIf rbKType2.Checked = True Then
'SendBuff(8) = &H61 'Byte 4 : Key Type B
'End If

SendBuff(9) = CInt("&H" & "01") 'Byte 5 : Key number
'SendBuff(9) = CInt("&H" & tAuthenKeyNum.Text) 'Byte 5 : Key number

SendLen = 10
RecvLen = 2

retCode = SendAPDU()
If retCode <> ModWinsCard.SCARD_S_SUCCESS Then
Exit Sub
Else
For indx = 0 To RecvLen - 1

'tmpStr = tmpStr & Right$("00" & Hex(RecvBuff(index)), 2)
tmpStr = tmpStr + Microsoft.VisualBasic.Right("00" & Hex(RecvBuff(indx)), 2) + " "

Next indx

'Checking for response
If tmpStr.Trim = "90 00" Then

Call displayOut(0, 0, "Authentication success")
Else
Call displayOut(4, 0, "Authentication failed")
End If
End If


End Sub


Private Sub leer()

cargarClave()
autentificar()
Dim tmpStr As String
Dim indx As Integer

' Validate Inputs
tBinData.Text = ""
tcampo2.Text = ""
TBnif.Text = ""

Call ClearBuffers()
'Read Binary Block command
SendBuff(0) = &HFF 'Class
SendBuff(1) = &HB0 'INS
SendBuff(2) = &H0 'P1
SendBuff(3) = bloque 'CInt("&H" & bloque) 'P2 : Block number
SendBuff(4) = CInt("16") 'Le : Number of bytes to read

SendLen = 5
RecvLen = CInt("16") + 2

retCode = SendAPDU()
If retCode <> ModWinsCard.SCARD_S_SUCCESS Then
Exit Sub
Else
For indx = RecvLen - 2 To RecvLen - 1
tmpStr = tmpStr + Microsoft.VisualBasic.Right("00" & Hex(RecvBuff(indx)), 2) + " "

Next indx

'Check for response
If tmpStr.Trim = "90 00" Then
tmpStr = ""
For indx = 0 To RecvLen - 3

tmpStr = tmpStr + Chr(RecvBuff(indx))

Next indx

If bloque = "04" Then
tBinData.Text = tmpStr
Else
If bloque = "05" Then
tcampo2.Text = tmpStr
Else
If bloque = "06" Then
TBnif.Text = tmpStr
End If
End If
End If

Else
Call displayOut(4, 0, "Read block error!")
End If
End If
End Sub


/****************************************/

La cuestión es que necesito "juntar" ambos codigos, porque lo que quiero es que el terminal movil me lea las tarjetas de 1k como lo hace con las UltraLight o como lo hace el lector ACR122.

Muchas gracias, un saludo.