Lab 2: J2ME: Java 2 Micro Edition (Writing Programs for Mobile Phones using Java) - PowerPoint PPT Presentation

About This Presentation
Title:

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

Description:

'free' download over the web via GPRS/3G ... (all of these usually require network connectivity, but may not charge you traffic cost) ... – PowerPoint PPT presentation

Number of Views:266
Avg rating:3.0/5.0
Slides: 63
Provided by: luisfgsar
Category:

less

Transcript and Presenter's Notes

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


1
Lab 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

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

3
Overview
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

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

6
Deployment 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)

7
J2ME Application Development
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/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/

9
Tools
  • Java
  • Sun Wireless Toolkit
  • Eclipse
  • EclipseME

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!

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

12
Basics
  • adapted from MIT AITI lecture to high school
    students in Kenyaby Mike Gordon (MIT)
  • Summer 2007

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

14
Terminology
Soft Buttons
Navigation (Arrow) Buttons
Select (OK) Button
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)

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

17
Life Cycle of a MIDlet
Constructor
destroyApp()
Paused
pauseApp()
startApp()
destroyApp()
Active
Destroyed
18
Differences 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!

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

20
The 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

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.

22
Example Application ToDoList
23
The 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

24
Commands
  • 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
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.

26
Responding 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

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

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)

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)

30
Example Run
31
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)

32
Forms example
  • Form form new Form(Form Title)
  • StringItem strItem new StringItem(Label,
    Value)
  • form.append(strItem)

33
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

34
Example
35
Example 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("")

36
Some 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

37
Other Features
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.

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

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

41
Exercise
  • Collect users input and send it via SMS to
    server
  • no need to receive the SMS via J2ME for now

42
J2ME Basic GUI Programming
  • from MIT AITI lecture in Kenyaby Mike Gordon
    (MIT)
  • Summer 2007

43
J2ME GUI
  • Idea Use abstractions to support many different
    mobile devices, different screen sizes, colors,
    different input types
  • Displayables
  • Alerts
  • Lists
  • Form
  • TextBox

44
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

45
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

46
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

47
Text Box - Flags
  • Combine flags and constraints with (or)
  • Displayable d
  • new TextBox(Email,64,TextField.ANY
    TextField.PASSWORD)

48
Alerts
  • 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?

49
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

50
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)

51
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

52
Lists
Exclusive Multiple
53
Creating Lists
  • public List(String title, int type)
  • public List(String title, int type,String
    stringElements, Image imageElements)

54
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)

55
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)

56
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)

57
Forms example
  • Form form new Form(Form Title)
  • StringItem strItem new StringItem(Label,
    Value)
  • form.append(strItem)

58
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

59
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....

60
Commands
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)
61
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)
62
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/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
Write a Comment
User Comments (0)
About PowerShow.com