Join Now
Quality Rating:
  • Currently 0.0 / 5
(0.0 / 5 - 0 votes cast)
Expertise Level:
  • Currently 0.0 / 5
(0.0 / 5 - 0 votes cast)

This page was last modified 16:53, 1 May 2008.

NFC URLWriter

From Forum Nokia Wiki

The code shows a basic MIDlet that writes a URL to an external Tag/Transponder. (Shown at NFC Forum Developer Training, WIMA 2008 and NFC-Congress Hagenberg 2008) Download appropriate NetBeans Project.

package at.nfcresearch.wima.examples;
 
// Packages for contactless Communcation
import java.io.IOException;
import javax.microedition.contactless.ContactlessException;
import javax.microedition.contactless.DiscoveryManager;
import javax.microedition.contactless.TargetProperties;
import javax.microedition.contactless.TargetListener;
import javax.microedition.contactless.TargetType;
 
// Packages for NDEF
import javax.microedition.contactless.ndef.NDEFRecord;
import javax.microedition.contactless.ndef.NDEFMessage;
import javax.microedition.contactless.ndef.NDEFRecordType;
import javax.microedition.contactless.ndef.NDEFTagConnection;
import javax.microedition.io.Connector;
 
 
// Packages for GUI Stuff
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.StringItem;
 
import javax.microedition.midlet.*;
 
public class URLWriter extends MIDlet implements TargetListener, CommandListener {
 
    // Display Stuff
    private Command exitCommand;
    private Form form;
 
    public URLWriter() {
        exitCommand = new Command("Exit", Command.EXIT, 1);
        form = new Form("NFC-Research.at: URL Writer");
 
        form.addCommand(exitCommand);
        form.setCommandListener(this);
        form.append("Touch Tag to write URL");
 
        // Registration of the TargetListener for external contactless
        // Targets (in this RFID_TAG).
        try {
            DiscoveryManager dm = DiscoveryManager.getInstance();
            dm.addTargetListener(this, TargetType.NDEF_TAG);
 
        } catch (ContactlessException ce) {
            displayAlert("Unable to register TargetListener: " + ce.toString(), AlertType.ERROR);
        }
 
    }
 
    public void startApp() {
        Display.getDisplay(this).setCurrent(form);
    }
 
    public void pauseApp() {
    }
 
    public void destroyApp(boolean unconditional) {
 
    }
 
    /**
     * Implementation of the Call-Back Function of the TargetListener
     * @param targetProperties: Array of Targets found by the Phone
     *
     */
    public void targetDetected(TargetProperties[] targetProperties) {
 
        // in case no targets found, exit the method
        if (targetProperties.length == 0) {
            return;
        }
 
        // NDEF Connection for write Operation
        NDEFTagConnection ndconn = getNDEFTAGConnection(targetProperties);
        try {
            // Open NDEF Connection to the first Tag found
            // ndconn = (NDEFTagConnection) Connector.open(targetProperties[0].getUrl());
 
 
            // Headerbyte: open Bookmark in Browser
            byte[] headerByte = {0x00};
 
            // Payload Text: URL as a byte-Array
            byte[] urlBytes = "http://www.nfc-research.com".getBytes();
 
            // Create NDEF Record
            NDEFRecord r = new NDEFRecord(new NDEFRecordType(NDEFRecordType.NFC_FORUM_RTD, "urn:nfc:wkt:U"), null, null);
 
            // Append Payload Manually
            r.appendPayload(headerByte);
            r.appendPayload(urlBytes);
 
            // Create Recoard Array and Add Record
            NDEFRecord[] myRecArray = new NDEFRecord[]{r};
 
            // Generate a Message out of the Array
            NDEFMessage myMessage = new NDEFMessage(myRecArray);
 
            // Write Message to Tag
            ndconn.writeNDEF(myMessage);
 
 
            displayAlert("Information written", AlertType.INFO);
 
        } catch (IOException io) {
            displayAlert("IOException during open() or Write(): " + io.toString(), AlertType.ERROR);
        } catch (ContactlessException io) {
            displayAlert("ContactlessException during writeNDEF(): " + io.toString(), AlertType.ERROR);
        } catch (Exception e) {
            displayAlert("Exception: " + e.toString(), AlertType.ERROR);
        } // in case of an exception, close connection properly
        finally {
 
            // close Connection again
            if (ndconn != null) {
                try {
                    ndconn.close();
                } catch (IOException ex) {
                    displayAlert("IOException during close(): " + ex.toString(), AlertType.ERROR);
                }
            }
        }
 
    }
 
    private NDEFTagConnection getNDEFTAGConnection(TargetProperties[] tProp) {
        for (int j = 0; j < tProp.length; j++) {
            Class[] connections = tProp[j].getConnectionNames();
            if (connections != null) {
                for (int i = 0; i < connections.length; i++) {
                    if (connections[i].getName().equals(
                            "javax.microedition.contactless.ndef.NDEFTagConnection")) {
                        try {
                            return (NDEFTagConnection) Connector.open(tProp[0].getUrl(connections[i]));
                        } catch (Exception e) {
                            displayAlert("Error writting NDEF: " + e.toString(), AlertType.ERROR);
                        }
                    }
                }
            }
        }
        return null;
    }
 
    /**
     * Implementation of the Call-Back function of the CommandListener
     * @param command: command key pressed
     * @param displayable: associated displayable Object
     */
    public void commandAction(Command command, Displayable displayable) {
        if (command == exitCommand) {
            DiscoveryManager dm = DiscoveryManager.getInstance();
            dm.removeTargetListener(this, TargetType.NDEF_TAG);
            destroyApp(false);
            notifyDestroyed();
        }
    }
 
    private void displayAlert(String error, AlertType type) {
        Alert err = new Alert(form.getTitle(), error, null, type);
        Display.getDisplay(this).setCurrent(err, form);
    }
}
Related Discussions
Thread Thread Starter Forum Replies Last Post
6131NFC and Supermarket use funkyplates Near Field Communication 11 2008-01-13 19:45
NFC SDK integration with Eclipse and Ant hvuoltee Near Field Communication 0 2007-04-25 14:16
6131 NFC Browser bug? tboufflet Near Field Communication 4 2007-06-18 16:31
NFC 3220 Creating package not work metos_rs Mobile Java Tools & SDKs 3 2007-08-30 13:43
NDEF and Mifare cgauld Near Field Communication 1 2007-07-09 13:14
 
Powered by MediaWiki