ppt - Computer Science and Engineering

advertisement
Developing MIDlets
Dr. Miguel A. Labrador
Department of Computer Science & Engineering
labrador@csee.usf.edu
http://www.csee.usf.edu/~labrador
1
Outline
•
•
•
•
•
•
•
MIDlet life cycle
Hello World example
User interface classes and APIs
Lists, text boxes, forms, alerts
Media API
Record Management Systems
Security
2
Copyright© Dr. Miguel A. Labrador
2
MIDlets
• Java program compiled using the APIs included in the CLDC
and MIDP specifications
• After compilation, several steps need to be done before using
the MIDlet in a real device
– Debugged in emulators
– Passed through the offline preverifier
– Packaged
• Creates the Java Archive file (JAR) and Java Application Descriptor
(JAD) file
• JAR file contains the manifest file
– Automatically generated by the jar tool
– Information about the MIDlet, such as name, vendor, version and
configuration and profile utilized
• JAD file contains additional information, such as URL and size
– Very useful for the mobile decide to decide whether to download
the MIDlet or not
3
Copyright© Dr. Miguel A. Labrador
3
Manifest and JAD Examples
Manifest File Example
JAD File Example
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.7.0
Created-By: 1.6.0_03-b05 (Sun
Microsystems Inc.)
MIDlet-2: CalculatorWebService, ,
edu.cse.usf.book.ws.CalculatorWebS
ervice
MIDlet-1: TCPTest, ,
edu.cse.usf.book.TCPTest
MIDlet-Vendor: Vendor
MIDlet-Name: TCPTest
MIDlet-Version: 1.0
MicroEdition-Configuration: CLDC-1.0
MicroEdition-Profile: MIDP-2.0
MIDlet-1: TCPTest, ,
edu.cse.usf.book.TCPTest
MIDlet-2: CalculatorWebService, ,
edu.cse.usf.book.ws.CalculatorWe
bService
MIDlet-Jar-Size: 12747
MIDlet-Jar-URL: TCPTest.jar
MIDlet-Name: TCPTest
MIDlet-Vendor: Vendor
MIDlet-Version: 1.0
MicroEdition-Configuration: CLDC-1.0
MicroEdition-Profile: MIDP-2.0
4
Copyright© Dr. Miguel A. Labrador
4
MIDlets
• All MIDlets have the same life cycle
New
Application
Instance
destroyApp()
Paused
pauseApp()
startApp()
Destroyed
End
Active
5
destroyApp()
Copyright© Dr. Miguel A. Labrador
5
A Hello World MIDlet Example
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class HelloWorld extends MIDlet implements CommandListener{
private Command exitCommand;
private TextBox tbox;
// MIDlet constructor
public HelloWorld() {
// Create "Exit" Command
exitCommand = new Command("Exit", Command.Exit, 1);
// Create TextBox to display the output
tbox = new TextBox ("Hello World MIDlet", "Hello, World!", 15, 0);
// Include the Exit Command in the interface and set its Listener
tbox.addCommand(exitCommand);
tbox.setCommandListener(this);
// Set the TextBox as the current screen
Display.getDisplay(this).setCurrent(tbox);
}
6
Copyright© Dr. Miguel A. Labrador
6
A Hello World MIDlet Example
// The system calls this function to start the MIDlet
protected void startApp() {}
// The application is switched to the paused state
protected void pauseApp() {}
// The application is destroyed
protected void destroyApp() {boolean force}
// MIDlet destroys itself if user gives the Exit Command
public void commandAction (Command c, Displayable d) {
if (c==exitCommand) {
destroyApp(false);
notifyDestroyed{};
}
}
}
7
Copyright© Dr. Miguel A. Labrador
7
Hello World MIDlet
8
Copyright© Dr. Miguel A. Labrador
8
The User Interface Hierarchy of Classes
• The package javax.microedition.lcdui contains most of the
classes and methods needed to design GUIs
StringItem
List
ImageItem
Display
TextBox
TextField
Screen
0 ... 1
Alert
DateField
Displayable
Form
0 ... n
Command
Gauge
Canvas
0 ... n
ChoiceGroup
Item
Spacer
9
CustomItem
Copyright© Dr. Miguel A. Labrador
9
The User Interface API
• Hierarchy of classes
– Display class at the top
• Manages the display and input devices of the system
– Contains methods to retrieve the properties of the device and to
request the display of object
• Only one instance of Display per MIDlet
• Reference of that instance can be obtained by getDisplay() method
– Displayable object contains the UI objects that are shown in the
display
• setCurrent() and getCurrent() utilized to set and retrieve the current
Displayable
• The application changes the current Displayable based on user action
• Displayable object may have listener and command objects associated
– User uses these objects to interact with the UI
– When the user selects a command, the application is automatically
notified
– The application may react changing the Displayable by another one
10
Copyright© Dr. Miguel A. Labrador
10
The User Interface API
– Commands provide users with a way to navigate through the
Displayables of an application
• If a Displayable has no command associated with it, the user has no
way to change the current Displayable
• All commands have a string label, priority, and command type
• Commands are added or removed using the addCommand() and
removeCommand() methods
• Six command types:
– BACK, OK, CANCEL, HELP, EXIT, STOP
• Following example shows the implementation of three
commands, two generic commands, save and delete, and one
specific command, the exit command
11
Copyright© Dr. Miguel A. Labrador
11
Commands Example
class ExampleCommand extends Screen implements CommandListener {
Command save = new Command ("Save", Command.SCREEN, 2};
Command delete = new Command ("Delete", Command.SCREEN, 3};
Command exit = new Command ("Exit", Command.EXIT, 4};
MIDlet midlet;
public ExampleCommand (MIDlet mymidlet) {
midlet = mymidlet;
setCommandListener(this);
addCommand(save);
addCommand(delete);
addCommand(exit);
}
public void commandAction (Command c, Displayable d) {
if (c == save) {
\\ Save data
}
else if (c == delete) {
\\ Delete data
}
else if (c == exit) {
\\ Exit the application
midlet.notifyDestroyed();
}
}
}
12
Copyright© Dr. Miguel A. Labrador
12
Lists, Text Boxes, Forms, and Alerts
• Displayable class has two subclasses: Canvas and Screen
• Canvas contains objects that allow the developer to have precise
control of what is drawn on the display
• Screen contains high-level objects that implement complete user
interface components such as lists, text boxes, and forms
– List class is a Screen that displays a list of choice elements
• Each element includes a string and may have an icon
• Lists can be implicit, exclusive, and multiple choice
– Append, delete, insert, set, getString, and getImage methods
– The type of list is selected using the interface class Choice
– TextBox class is a Screen that allows the user to input and edit text
• Application can set input constraints
– ANY, NUMERIC, DECIMAL, PHONENUMBER, URL, EMAILADDR
• A text box must have commands
13
Copyright© Dr. Miguel A. Labrador
13
Lists, Text Boxes, Forms, and Alerts
– Form is a Screen that may contain StringItems, ImageItems,
DateFields, TextFields, Gauges, and ChoiceGroups
• Any of the subclasses of class Item
• Form can be manipulated using the insert, append, delete, set, get, size,
and deteleAll methods
– Alerts are Screens that can inform the user about errors and other
exceptions, or as short informational notes and reminders
• Alerts are displayed for certain amount of time using the setTimeout
method, or modal, which requires the user input to close it
– ALARM, CONFIRMATION, ERROR, INFO, and WARNING types
14
Copyright© Dr. Miguel A. Labrador
14
List Example
List list = new List (String title, int listType,
String[ ] stringElements, Image[ ]
imageElements);
where listType can be IMPLICIT, EXCLUSIVE, or
MULTIPLE; stringElements (imageElements) is the
initial array of elements(images)
e.g., List list = new List (``Email list'',
Choice.IMPLICIT, ``labrador@cse.usf.edu,
ajperez@cse.usf.edu, pedrow@cse.usf.edu'', null);
15
Copyright© Dr. Miguel A. Labrador
15
Alert Example
Alert alert = new Alert (String title, String
alertText, Image alertImage, AlertType.XXX);
where XXX can be any of the alertType
e.g., Alert alert = new Alert (``Warning'',
``Delete all?'', null, AlertType.WARNING);
16
Copyright© Dr. Miguel A. Labrador
16
The Media API
• Designed to support sound in resource-constrained devices
– Subset of the Mobile Media API, an optional package meant for
Java ME devices with advanced sound and multimedia capabilities
• Supports tone generation and media flow control (audio
playback)
– Implemented in two packages
• The javax.microedition.media package, which is a fully compatible
subset of classes included in the Mobile Media API
• The javax.microedition.media.control package that defines specific
control types that can be used with a Player
• Three main components
– Manager: used by the application to request Players
– Player: plays the media
• Wav, MP3, MIDI files and tone sequences
– Controls: implement the controls of the Player
• Start, stop, close
17
Copyright© Dr. Miguel A. Labrador
17
Creating a Player
• The createPlayer method of the Manager class can create a
player in two different ways
Player Manager.createPlayer (String url)
where url specifies the protocol and content of the data as
follows:
<protocol>:<content location>
e.g., Player p = Manager.createPlayer(``http://hello.wav'');
18
Copyright© Dr. Miguel A. Labrador
18
Creating a Player
• A player can also be created to playback media from an
inputStream
• Start(), stop(), close() methods
Player Manager.createPlayer (InputStream stream, String type);
e.g., InputStream istream =
getClass().getResourceAsStream(``hello.wav'');
Player p = Manager.createPlayer(istream, ``audio/X-wav'');
p.start();
Where type can be: Wave audio files (audio/x-wav), AU audio files
(audio/basic), MP3 audio files(audio/mpeg), MIDI files
(audio/midi), Tone sequences (audio/x-tone-seq)
19
Copyright© Dr. Miguel A. Labrador
19
Generating Tones
• The Manager class can also be used to generate tones
Manager.playTone (int note, int duration, int volume)
• Volume is a value from 0 to 100
• Duration is the duration of the tone in milliseconds
• Note defines the tone of the note
– Number from 0 to 127
– note = (12 x log2 (f/440)) + 69
– Frequency 440 Hz corresponds to note 69, which is MIDI note A
20
Copyright© Dr. Miguel A. Labrador
20
The Record Management System (RMS)
• Simple record-oriented database that allows MIDlets to persistently
store data in the mobile device
– Included in the javax.microedition.rms package
• Uses the concept of record store, a collection of persistent records
• Records are arrays of bytes of different lengths and types within a
record store
• Records are automatically identified by a recordID
– Monotonically increasing-by-one mechanism with no wrap around
– Adjacent records in a record store do not necessarily have subsequent
record IDs
• Record stores are uniquely named using the name of the MIDlet
suite plus the name of the record store
– MIDlet suites are identified using the attributes MIDlet-vendor and
MIDlet-name of the application descriptor
21
Copyright© Dr. Miguel A. Labrador
21
The Record Management System (RMS)
• The RMS API does not include locking mechanisms but ensures
that record store operations are atomic, synchronous, and
serialized
– It is the programmer’s responsibility to coordinate access when
multiple threads within the same MIDlet attempt to access the same
record simultaneously
• No corruption of data guarantee but the serialization mechanism might
give MIDlets access to the record in an undesired sequence
• Methods to manipulate record stores
– listRecordStores, deleteRecordStore, openRecordStore,
closeRecordStore, getNumRecords, getSize, getSizeAvailable,
getNextRecordID, getVersion, getLastModified
• Methods to manipulate records
– addRecord, deleteRecord, getRecordSize, getRecord, setRecord
22
Copyright© Dr. Miguel A. Labrador
22
Opening a New Record Store
public void openRecStore(String recordStore_name)
{
try{
RecordStore rs =
RecordStore.openRecordStore(recordStore_name,true);
}
catch(Exception e)
{
System.err.println(e.toString());
}
}
23
Copyright© Dr. Miguel A. Labrador
23
Adding a New Record to a Record Store
public void writeRecord(String str)
{
byte[] rec = str.getBytes();
try
{
rs.addRecord(rec, 0, rec.length);
}
catch (Exception e)
{
System.err.println(e.toString());
}
}
24
Copyright© Dr. Miguel A. Labrador
24
Security
• Security is guided by the following goals
– Confidentiality
• Disclosure of information only to authorized users or systems
– Encryption is a common mechanism to provide confidentiality
» Symmetric and Asymmetric encryption
– Integrity
• Data cannot be modified without proper authorization
– Achieved by cryptographic methods plus additional information
– Authenticity
• Making sure the message is authentic; it comes from the real source
– Digital signatures using asymmetric encryption
– Availability
• Making sure information is available when needed
25
Copyright© Dr. Miguel A. Labrador
25
MIDlet Security
• MIDP 1.0 specification used the sandbox model
– Run in a controlled and separate environment and do not interfere
with each other
• MIDP 2.0 expands this model including the concepts of trusted
MIDlet and protection domains
• Untrusted MIDlet suite is one whose authenticity and integrity of
JAR file cannot be trusted by the device
– Executed in untrusted and restrictive domain
• MIDP 2.0 includes the mechanisms to identify and trust a MIDlet
suite and the concept of protection domain for trusted MIDlets
• Protection domain is a set of permissions associated with a root
certificate in the device
– A specific domain can be defined in the device using the public key
of the domain entity, e.g., a software development company
• Then, a MIDlet signed by the company will be given access to all those
resources included in the permissions of the domain
26
Copyright© Dr. Miguel A. Labrador
26
MIDlet Security
• Digital signatures and authentication methods are utilized to
decide whether to trust or not a MIDlet suite
– Internet X.509 Public Key Infrastructure standard included in RFC
2459 and RFC 2437 “PKCS #1: RSA Cryptography Specifications,
version 2.0”
– First, the MIDlet is signed; then, at download time, it is authenticated
• Entire process consists of the following steps
– Sender creates a signing certificate sending its Distinguished Name
and public key to a Certificate Authority (CA) to obtain a RSA X.509
certificate
– Sender encodes and inserts certificate(s) in the JAD file
– Sender signs the JAR file with its private key to provide MIDlet
integrity; however, it does not include the JAD file
– Receiver downloads the MIDlet, checks the JAD file and verifies
signer certificates and JAR signature
27
Copyright© Dr. Miguel A. Labrador
27
MIDlet Security
– Receiver verifies signer certificates by looking at the CA in the JAD file
and the root certificate authorities stored in the device
• If authentication fails, MIDlet is not installed
– Receiver verifies JAR signature
• Gets signer’s public key from the CA and uses this key, the signature
included in the JAD file, and the digest included in the JAR file to verify it
• Certificates are used in MIDP 2.0 security for authentication
– Package javax.microedition.pki provides the Certificate interface
• getIssuer(), getNotAfter(), getNotBefore(), getSerialNumber(),
getSigAlgName(), getSubject(), getType(), and getVersion() methods
• Networking security achieved by Secure Socket Layer (SSL) and
the Transport Layer Security (TLS) protocols
– HttpsConnection and SecureConnection interfaces
– Method getSecurityInfo can be applied to an open connection to fill a
SecurityInfo object
• Obtain protocol name and version, cipher suite, certificate of the connection
28
Copyright© Dr. Miguel A. Labrador
28
Download