Namespaces

Variants
Actions

Please note that as of October 24, 2014, the Nokia Developer Wiki will no longer be accepting user contributions, including new entries, edits and comments, as we begin transitioning to our new home, in the Windows Phone Development Wiki. We plan to move over the majority of the existing entries over the next few weeks. Thanks for all your past and future contributions.

Como enviar uma imagem para tag uma NDEF

From 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 18:23.
202 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.

×