Title: Lab 2: J2ME: Java 2 Micro Edition (Writing Programs for Mobile Phones using Java)
1Lab 2 J2ME Java 2 Micro Edition(Writing
Programs for Mobile Phones using Java)
MIT D-Lab ICT4D
- Luis F. G. Sarmenta
- originally delivered 3/13/2008draft 2 4/10/2008
2Recap 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
3Overview
4What 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
5What 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
6Deployment and Business Model
- 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 MNOs may not allow this
- Commercial deployment
- packaged with phone
- download from the MNO
- download from a software vendor/aggregators web
site - request by SMS
- (all of these usually require network
connectivity, but may not charge you traffic
cost)
7J2ME Application Development
8References
- 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/159059479
7) - 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/
9Tools
- Java
- Sun Wireless Toolkit
- Eclipse
- EclipseME
10Mobile 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!
11Why 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
12Basics
- adapted from MIT AITI lecture to high school
students in Kenyaby Mike Gordon (MIT) - Summer 2007
13Compilation 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
14Terminology
Soft Buttons
Navigation (Arrow) Buttons
Select (OK) Button
15CLDC/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)
16MIDlets
- 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
17Life Cycle of a MIDlet
Constructor
destroyApp()
Paused
pauseApp()
startApp()
destroyApp()
Active
Destroyed
18Differences Between J2SE and J2MEP
- No floating point (before CLDC 1.1)
- System.out.print/println dont 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!
19The 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
20The MIDlet Philosophy
- The devices 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
21The MIDlet Philosophy
- Show a Displayable with something on it
- Wait for input from user
- Decide what Displayable to show next and what
should be on this Displayable. - Go to 1.
22Example Application ToDoList
23The Displayable Hierarchy
Displayable
Canvas
Screen
Alert
List
Form
TextBox
- 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
24Commands
- A command is something the user can invoke
- We dont 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
25Responding 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.
26Responding to Command Events
- We need to tell the Displayable the object in
which to call commandAction() - Two Steps
- The class of the object must implement the
interface CommandListener - CommandListener defines commandAction()
- You tell the Displayable which object by calling
setCommandListener(CommandListener) on the
Displayable
27Example
- 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
28Example
- 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)
-
29Example
- 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)
-
30Example Run
31Forms
- 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)
32Forms example
- Form form new Form(Form Title)
- StringItem strItem new StringItem(Label,
Value) - form.append(strItem)
33Forms - 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
34Example
35Example Form and SMS
- import 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("")
36Some Notes
- Dont 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
37Other Features
38SMS 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.
39NFC (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
40Other 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
41Exercise
- Collect users input and send it via SMS to
server - no need to receive the SMS via J2ME for now
42J2ME Basic GUI Programming
- from MIT AITI lecture in Kenyaby Mike Gordon
(MIT) - Summer 2007
43J2ME GUI
- Idea Use abstractions to support many different
mobile devices, different screen sizes, colors,
different input types - Displayables
- Alerts
- Lists
- Form
- TextBox
44Textbox
- 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
45TextBox - 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
46Text 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
47Text Box - Flags
- Combine flags and constraints with (or)
- Displayable d
- new TextBox(Email,64,TextField.ANY
TextField.PASSWORD)
48Alerts
- alert types ALARM, CONFIRMATION,ERROR,INFO, and
WARNING
- timed certain amount of time Your
transaction complete - modal until user dismisses it are you sure
you want to quit? exit without saving?
49Alerts
- 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
50Alerts
- 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)
51Lists
- 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
52Lists
Exclusive Multiple
53Creating Lists
- public List(String title, int type)
- public List(String title, int type,String
stringElements, Image imageElements)
54Modifying 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)
55Modifying 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)
56Forms
- 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)
57Forms example
- Form form new Form(Form Title)
- StringItem strItem new StringItem(Label,
Value) - form.append(strItem)
58Forms - 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
59Form 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....
60Commands
To Create a command, you need a name, type and
also a priority. Ex
Command c new Command(OK, Command.OK, 0)
public void addCommand(Command cmd) public void
removeCommand(Command cmd)
61Command 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)
62J2ME 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/wireles
sjava_ch5/index1.html - http//developers.sun.com/mobility/midp/articles/u
i/ - 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