lab 2: j2me: java 2 micro edition (writing programs for mobile phones using java) luis f. g....

62
Lab 2: J2ME: Java 2 Micro Edition (Writing Programs for Mobile Phones using Java) Luis F. G. Sarmenta originally delivered: 3/13/2008 draft 2: 4/10/2008 MIT D-Lab ICT4D

Upload: john-warren

Post on 23-Dec-2015

214 views

Category:

Documents


0 download

TRANSCRIPT

Lab 2: J2ME: Java 2 Micro Edition(Writing Programs for Mobile Phones using Java)

Luis F. G. Sarmenta

originally delivered: 3/13/2008draft 2: 4/10/2008

MIT D-Lab ICT4D

D-Lab ICT for DevelopmentLab 2: SMS Services

Slide 2

Recap: Mobile Phone Capabilities, Apps

• SMS (Text Messaging) –based services– send text commands, receive info– receive alerts and subscriptions

• MMS (Multimedia Messaging) –based services– send and receive multimedia to/from server

• J2ME (Java 2 Micro Edition) applications– programs running on the phone– e.g., games

• Internet/Web services– via WAP (limited) and/or GPRS (dialup-speed connection)– via 3G (broadband speed connection)

• Location-based services– services that make use of location of users

• Micropayment applications– ability to send/transfer cellphone credits via SMS– leads to cash-less, credit-card less, electronic payment mechanisms

Overview

D-Lab ICT for DevelopmentLab 2: SMS Services

Slide 4

What is J2ME for?

• Writing Programs that run on the phone

– no need to be connected online– uses processor and interface of

phone• Applications

– Games• for fun, but can be educational

– Calculation / Computation tools• e.g., medical calculators, etc.

– Provide a better user interface to a service

• e.g., Maps for mobile (Google, Microsoft, et al)

• can be useful for data forms

D-Lab ICT for DevelopmentLab 2: SMS Services

Slide 5

What J2ME lets you do

• Computation / logic– general-purpose language– limited only by processor speed

and memory• Graphics

– including 3D on new phones• Connectivity

– SMS, MMS, Bluetooth, HTTP• Other Features

– NFC/RFID, Location, etc.• “Write Once Run Anywhere”

– … IF you write your program well, AND your device supports all optional features you use

D-Lab ICT for DevelopmentLab 2: SMS Services

Slide 6

• Development or Free Use– via Bluetooth, cable, or infrared– “free” download over the web via

GPRS/3G• download the jad file first, which makes

phone download the jar file• Note: you may pay traffic cost• Some MNO’s may not allow this

• Commercial deployment– packaged with phone– download from the MNO– download from a software

vendor/aggregator’s web site– request by SMS– (all of these usually require network

connectivity, but may not charge you traffic cost)

Deployment and Business Model

J2ME Application Development

D-Lab ICT for DevelopmentLab 2: SMS Services

Slide 8

References

• Note: Our lab sessions for this class are only meant to jump-start you and get you on your way. You should read further on your own!

• Book (Highly Recommended!)– Li and Knudsen. Beginning J2ME:

From Novice to Professional, Third Edition. Published by Apress.(http://www.apress.com/book/view/1590594797)

• Examples– The Sun Wireless Toolkit has many examples!– See also http://java.sun.com/javame/reference/– See also source code download available from Apress

• Some Lecture Notes by Others– http://eprom.mit.edu/education.html– http://web.mit.edu/21w.780/www/spring2007/

D-Lab ICT for DevelopmentLab 2: SMS Services

Slide 9

Tools

• Java

• Sun Wireless Toolkit

• Eclipse

• EclipseME

D-Lab ICT for DevelopmentLab 2: SMS Services

Slide 10

Mobile Phone for Our Labs(Thanks to Nokia Research Center Cambridge!)

• N82 and N95– camera, 3G, GPS, TV out

• E61i– QWERTY keyboard

• 6131 NFC– mid-range phone with NFC

(contactless RFID) reader• N810

– Internet tablet (not a phone)– hi-res screen, GPS, camera,

QWERTY, etc.• 2610

– low-end phone – only $9.99 for an official

refurb unit, no contract!

D-Lab ICT for DevelopmentLab 2: SMS Services

Slide 11

Why High-End Phones?

• You can always simulate a low-end phone with a high-end phone … but not the other way around

• For some projects, using high-end phones is OK, since only a few people (e.g., health workers) need to have these

• Also … prices will inevitably go down in the future

• In any case, we will encourage designing solutions that have the broadest impact

– e.g., SMS-based services and platform-independent J2ME

Basics

adapted from MIT AITI lecture to high school students in Kenya

by Mike Gordon (MIT)Summer 2007

D-Lab ICT for DevelopmentLab 2: SMS Services

Slide 13

Compilation for J2ME

• Extra steps versus desktop Java:– Compilation using Java compiler

• Must include the J2ME Java libraries

– Pre-verification of bytecode

– Package the classes application for deployment• Create a jar archive of the class files

• All this is done for you in the Java Wireless Toolkit

D-Lab ICT for DevelopmentLab 2: SMS Services

Slide 14

Terminology

Soft Buttons

Select (OK) Button

Navigation (Arrow) Buttons

D-Lab ICT for DevelopmentLab 2: SMS Services

Slide 15

CLDC/MIDP Applications

• All cell phone applications inherit from the MIDlet class

– javax.microedition.midlet.MIDlet

• The MIDlet class defines 3 abstract methods that the cell phone app must override:– protected abstract void startApp();– protected abstract void pauseApp();– protected abstract void destroyApp(boolean unconditional);

D-Lab ICT for DevelopmentLab 2: SMS Services

Slide 16

MIDlets

• These methods are called by the J2ME runtime system (interpreter) on your phone.

– startApp(), when application is started

– pauseApp(), when application is paused

– destroyApp(boolean) when application is exited

D-Lab ICT for DevelopmentLab 2: SMS Services

Slide 17

Life Cycle of a MIDlet

Paused

Active Destroyed

D-Lab ICT for DevelopmentLab 2: SMS Services

Slide 18

Differences Between J2SE and J2MEP

• No floating point (before CLDC 1.1)

• System.out.print/println don’t do anything on real phone

• Subset of java.lang

– Limited implementation of many classes

• Very limited java.util / java.io

• Make sure you are reading the JavaDoc for the J2ME MIDP when you are developing!

D-Lab ICT for DevelopmentLab 2: SMS Services

Slide 19

The MIDlet Philosophy

• Abstraction:– Specify the user interface in abstract terms

– Just specify the components to add

– A limited set of predefined components

– Let the MIDP implementation decide on the placement and appearance

• Example– add a “Done” command somewhere on the

screen

D-Lab ICT for DevelopmentLab 2: SMS Services

Slide 20

The MIDlet Philosophy

• The device’s display is represented by an object of the Display class

– Think of it as an easel

• Objects that can be added to a Display are subclasses of Displayable

– Canvas on the easel

• MIDlets change the display by calling setCurrent(Displayable) in Display

D-Lab ICT for DevelopmentLab 2: SMS Services

Slide 21

The MIDlet Philosophy

1. Show a Displayable with something on it

2. Wait for input from user

3. Decide what Displayable to show next and what should be on this Displayable.

4. Go to 1.

D-Lab ICT for DevelopmentLab 2: SMS Services

Slide 22

Example Application: ToDoList

D-Lab ICT for DevelopmentLab 2: SMS Services

Slide 23

The Displayable Hierarchy

DisplayableDisplayable

ScreenScreen

AlertAlert ListList FormForm TextBoxTextBox

CanvasCanvas

• The Screen sub-classes are abstract, meaning it is up the MIDP implementation to decided on their appearance

• All these classes are defined in javax.microedition.lcdui

D-Lab ICT for DevelopmentLab 2: SMS Services

Slide 24

Commands

• A command is something the user can invoke

• We don’t really care how it is shown on the screen

• Example:– Command c = new Command(“OK”,

Command.OK, 0);

• You can add commands to a Displayable using:– public void addCommand(Command)

Commands

D-Lab ICT for DevelopmentLab 2: SMS Services

Slide 25

Responding to Command Events

• When a Command is invoked by the user, a method is called to service the command

• The exact method is:•public void commandAction(

Command c, Displayable d)

• c is the Command invoked and d is the Displayable the Command was added to.

D-Lab ICT for DevelopmentLab 2: SMS Services

Slide 26

Responding to Command Events

• We need to tell the Displayable the object in which to call commandAction()

• Two Steps:

1. The class of the object must implement the interface CommandListener•CommandListener defines commandAction()

2. You tell the Displayable which object by calling setCommandListener(CommandListener) on the Displayable

D-Lab ICT for DevelopmentLab 2: SMS Services

Slide 27

Example

import javax.microedition.lcdui.*;

import javax.microedition.midlet.MIDlet;

public class HelloWorld extends MIDlet implements CommandListener {

private static Command CMD_EXIT = new Command("Exit", Command.EXIT, 0);

private static Command CMD_NEXT = new Command("Next", Command.OK, 0);

private TextBox textBox1;

private TextBox textBox2;

D-Lab ICT for DevelopmentLab 2: SMS Services

Slide 28

Example

public void startApp()

{

textBox1 = new TextBox("TextBox1",

"The first Displayable", 30, TextField.ANY);

textBox1.addCommand(CMD_NEXT);

textBox1.setCommandListener(this);

textBox2 = new TextBox("TextBox2",

"The second Displayable", 30, TextField.ANY);

textBox2.addCommand(CMD_EXIT);

textBox2.setCommandListener(this);

Display.getDisplay(this).setCurrent(textBox1);

}

D-Lab ICT for DevelopmentLab 2: SMS Services

Slide 29

Example

public void commandAction(Command c, Displayable d)

{

if (d == textBox1 && c == CMD_NEXT)

Display.getDisplay(this).setCurrent(textBox2);

else if (d == textBox2 && c == CMD_EXIT)

notifyDestroyed();

}

public void pauseApp()

{

}

public void destroyApp(boolean u)

{

}

D-Lab ICT for DevelopmentLab 2: SMS Services

Slide 30

Example Run

Forms

• A form includes collection of UI controls called Items

public Form(String title)

public Form(String title,Item[] items)

• public int append()

• public void set(int index,Item item)

• public void delete(int index)

• public void deleteAll()

• public int size()

• public Item get(int index)

Forms example

• Form form = new Form(“Form Title”);

• StringItem strItem = new StringItem(“Label:”, “Value”);

• form.append(strItem);

Forms - Items

• String , textfield, image Items, datefield

• Choice Group – similar to Lists before

• events and item changes as well

• Can create custom items to use on your own and now you can build up almost any type of UI component to make your needs

Example

D-Lab ICT for DevelopmentLab 2: SMS Services

Slide 35

Example: Form and SMSimport javax.microedition.lcdui.*;import javax.microedition.midlet.*;

public class Hello extends MIDlet implements CommandListener {

private static Command CMD_EXIT = new Command("Exit", Command.EXIT, 0); private static Command CMD_OK = new Command("OK", Command.OK, 0);

private Form form; private TextField textField;

public Hello() { } protected void destroyApp(boolean arg0) throws MIDletStateChangeException { } protected void pauseApp() { } protected void startApp() throws MIDletStateChangeException { form = new Form(""); textField = new TextField("Name", "", 20, TextField.ANY); form.append(textField); form.addCommand(CMD_EXIT); form.addCommand(CMD_OK); form.setCommandListener(this); Display.getDisplay(this).setCurrent(form); } public void okPressed() { SMSLibrary.sendShortMessage("Hello " + textField.getString(), "6174606583"); } public void commandAction(Command c, Displayable d) { if (c == CMD_OK) { okPressed(); } else if (c == CMD_EXIT) { notifyDestroyed(); } }}

D-Lab ICT for DevelopmentLab 2: SMS Services

Slide 36

Some Notes

• Don’t forget to add the Midlet class file to the list of Midlets in the jad

• Make sure Java Compiler is set to generate 1.1 code

Other Features

D-Lab ICT for DevelopmentLab 2: SMS Services

Slide 38

SMS and Messaging API

• For simple sending, just use the SMSLibrary class we provide for you

• See Knudsen book for more details and more advanced features

– receiving SMS

– sending and receiving MMS

– binary SMS

– etc.

D-Lab ICT for DevelopmentLab 2: SMS Services

Slide 39

NFC (Contactless)

• NFC – Near Field Communications– communicate with contactless / “RFID” devices

• Supported by Nokia 6131 NFC phone and a few others

• Reading Unique ID is simple• You can also send more complex commands to

the NFC• Download Nokia 6131 NFC SDK from

forum.nokia.com• Get NFC tags from Rich Fletcher

D-Lab ICT for DevelopmentLab 2: SMS Services

Slide 40

Other Features

• GUI Controls and Graphics• Location• Security• Bluetooth• Web• etc.

• See Knudsen book for Bluetooth and Web access• See Sun Wireless Toolkit Examples for other

examples

D-Lab ICT for DevelopmentLab 2: SMS Services

Slide 41

Exercise

• Collect user’s input and send it via SMS to server

– no need to receive the SMS via J2ME for now

J2ME Basic GUI Programming

from MIT AITI lecture in Kenyaby Mike Gordon (MIT)

Summer 2007

J2ME GUI

• Idea: Use abstractions to support many different mobile devices, different screen sizes, colors, different input types

• Displayables

– Alerts

– Lists

– Form

– TextBox

Textbox

• allows the user to enter a String (zipcode,name,password)

• depending on input may be a tedious process

public TextBox(String title, String text, int maxSize, int constraints)

– title = screen title– text = initial text on screen– maxSize = maximum size of text

box– constraints – restrict input

TextBox - Constraints

• Constrain the input characters

– TextField.ANY – allows any type of input supported by the device

– TextField.NUMERIC– restricts to only integers

– TextField.DECIMAL– allows numbers with fractional parts

– TextField.PHONENUMBER – requires a telephone number

– TextField.EMAILADDR – requires an email address

– TextField.URL – requires a web address

Text Box - Flags

• Flags define behaviour, opposed to restricting it

– TextField.PASSWORD

– TextField.UNEDITABLE

– TextField.SENSITIVE

– TextField.NON_PREDICTIVE

– TextField.INITIAL_CAPS_WORD

– TextField.INTIAL_CAPS_SENTENCE

• No Validation than use TextField.ANY and 0 for constraints parameter

Text Box - Flags

• Combine flags and constraints with | (or)

Displayable d =

new TextBox(“Email”,64,TextField.ANY |

TextField.PASSWORD);

Alerts

• timed – certain amount of time – “Your transaction complete”

• modal – until user dismisses it – “are you sure you want to quit?” “exit without saving?”

– alert types: ALARM, CONFIRMATION,ERROR,INFO, and WARNING

Alerts

public Alert() or

public Alert(String title, String alertText, Image alertImg, AlertType alertType)

• any or all parameters can be null

– default timeout , but can change timeout length

– Forever timeout means that it is modal

Alerts

• You can create an alert with:

Alert alt = new Alert(“Sorry”, “I Am sorry Dave”, null, null);

• Set the timeout to 5 seconds by:

alt.setTimeout(5000);

• Make it a modal alert by:

alt.setTimeout(FOREVER);

Lists

• users select items (called elements) from choices

• Exclusive -Single Selection – ex. radio buttons

• Multiple – Multiple Selection – ex. check list

• Text String or image is used to represent each element

Lists

Exclusive Multiple

Creating Lists

public List(String title, int type)

public List(String title, int type,String[] stringElements, Image[] imageElements)

Modifying Lists

• public void set(int elementNum, String stringPart, Image imagePart)

• public void insert(int elementNum, String stringPart, Image imagePart)

• public int append(String stringPart, Image imagePart)

Modifying Lists

• public String getString(int elementNum)• public String getImage(int elementNum)• public void delete(int elementNum)• public void deleteAll()• public boolean isSelected(int index)• public int getSelectedIndex()• public void setSelectedIndex(int index,

boolean selected)

Forms

• A form includes collection of UI controls called Items

public Form(String title)

public Form(String title,Item[] items)

• public int append()

• public void set(int index,Item item)

• public void delete(int index)

• public void deleteAll()

• public int size()

• public Item get(int index)

Forms example

• Form form = new Form(“Form Title”);

• StringItem strItem = new StringItem(“Label:”, “Value”);

• form.append(strItem);

Forms - Items

• String , textfield, image Items, datefield

• Choice Group – similar to Lists before

• events and item changes as well

• Can create custom items to use on your own and now you can build up almost any type of UI component to make your needs

Form Layout

• Left to right, rows top to bottom

• items have labels, and can also have commands

• set size

• set layouts for individual items

– setLayout(); getLayout();

– LAYOUT_LEFT, LAYOUT_CENTER....

Commands

Command c = new Command(“OK”, Command.OK, 0);

To Create a command, you need a name, type and also a priority.

Ex:

public void addCommand(Command cmd)

public void removeCommand(Command cmd)

Command Types

There are different types of commands available for you to use:Command.OK – Confirms a selction

Command.CANCEL – Cancels pending changes

Command.BACK – Moves the user back to a previous screen

Command.STOP – Stop a running operation

Command.HELP – Shows application Instructions

Command.SCREEN – indicates generic type for specific application commands

Command c = new Command("Launch", Command.SCREEN, 0);

J2ME GUI Resources

Knudsen and Li. Beginning J2ME: From Novice to Professional, Third Edition. Apress. (http://www.apress.com/book/view/1590594797)

• http://www.onjava.com/pub/a/onjava/excerpt/wirelessjava_ch5/index1.html

• http://developers.sun.com/mobility/midp/articles/ui/ - Sun's J2ME GUI tutorial

• http://www.j2mepolish.org/ – A powerful dual-license open-source GUI Designer which may be useful for your own

projects beyond this course