×
Namespaces

Variants
Actions

Como enviar uma imagem para tag uma NDEF

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata

Compatibilidade
Plataforma(s):
Series 40

Artigo
Tradução:
Por valderind4
Última alteração feita por lpvalente em 25 Jan 2014

Este artigo mostra como enviar uma imagem para uma tag NDEF, e depois lê-la de volta. O desenho é feito usando TargetListener e NDEFTagConnection. Leitura usando NDEFRecordListener. Imagem usada neste exemplo Media:smiley.png

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
 
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.contactless.ndef.NDEFMessage;
import javax.microedition.contactless.ndef.NDEFRecord;
import javax.microedition.contactless.ndef.NDEFRecordListener;
import javax.microedition.contactless.ndef.NDEFRecordType;
import javax.microedition.contactless.ndef.NDEFTagConnection;
import javax.microedition.io.Connector;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Image;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
 
/*
* Um simples exemplo que pode desenhar uma imagem numa tag RFID e lê-la do RFID.
* A escrita é realizada utilizando TargetListener e NDEFTagConnection.
* A leitura é realizada com NDEFRecordListener.
*/

public class ImageWrite extends MIDlet implements TargetListener,
NDEFRecordListener, CommandListener {
 
private DiscoveryManager dm;
 
private Form form;
 
// Lê e escreve comandos para setar o modo da aplicação.
private Command readCommand;
 
private Command writeCommand;
 
// Valor booleano informando qual modo a aplicação está
private boolean read = true;
 
protected void startApp() throws MIDletStateChangeException {
dm = DiscoveryManager.getInstance();
 
try {
// Registra uma tag NDEF para o listener alvo
dm.addTargetListener(this, TargetType.NDEF_TAG);
// ..e o mime type da imagem para o listener do NDEF
dm.addNDEFRecordListener(this, new NDEFRecordType(
NDEFRecordType.MIME, "image/png"));
} catch (IllegalStateException e) {
form.append(e.toString());
} catch (ContactlessException e) {
form.append(e.toString());
}
form = new Form("Form");
readCommand = new Command("Read", Command.OK, 1);
writeCommand = new Command("Write", Command.OK, 1);
form.addCommand(writeCommand);
form.setCommandListener(this);
Display.getDisplay(this).setCurrent(form);
}
 
protected void pauseApp() {
}
 
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
}
 
// Tag NDEF detectada
public void targetDetected(TargetProperties[] properties) {
// Se a aplicação não está no modo de leitura - escreve imagem na tag
if (!read) {
NDEFTagConnection conn = null;
try {
// Abre conexão com a tag NDEF
conn = (NDEFTagConnection) Connector.open(properties[0]
.getUrl());
 
// Ler a imagem do telefone via ByteArrayOutputStream
InputStream is = getClass().getResourceAsStream("smiley.png");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int c;
while ((c = is.read()) != -1) {
baos.write(c);
}
 
// Cria um repositório de armazenamento NDEF para ser adicionado a NDEF Message
NDEFRecord recordToWrite = new NDEFRecord(new NDEFRecordType(
NDEFRecordType.MIME, "image/png"), null, baos
.toByteArray());
 
// Cria uma NDEF Message e adiciona o repositório criado
NDEFMessage write_container = new NDEFMessage();
write_container.appendRecord(recordToWrite);
 
// Escreve a NDEF Message na tag
conn.writeNDEF(write_container);
 
form.append("Image witten");
 
} catch (IOException e) {
form.append(e.toString());
} catch (Exception e) {
form.append(e.toString());
} finally {
try {
if (conn != null) {
conn.close();
}
} catch (IOException e) {
form.append(e.toString());
}
}
}
}
 
// detectada mensagem NDEF
public void recordDetected(NDEFMessage mes) {
// Se a aplicação não está no modo de leitura - mostra a imagem
if (read) {
// Obtém a imagem png do NDEF message
NDEFRecord rec[] = mes.getRecord(new NDEFRecordType(
NDEFRecordType.MIME, "image/png"));
 
// Cria objeto Image do repositório - o qual é uma imagem codificada em array de bytes
Image img = Image.createImage(rec[0].getPayload(), 0, (int) rec[0]
.getPayloadLength());
form.append(img);
}
}
 
// Modifica o modo da aplicação de leitura para escrive e virce versa
public void commandAction(Command c, Displayable d) {
if (read) {
read = false;
form.removeCommand(writeCommand);
form.addCommand(readCommand);
} else {
read = true;
form.removeCommand(readCommand);
form.addCommand(writeCommand);
}
}
}
This page was last modified on 25 January 2014, at 21:23.
52 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×