Download PowerPoint презентация

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
Java 2 Micro Edition
Разработване на приложения
за мобилни телефони
Пламен Желязов
Eternity Logic
За какво ще говорим?
●
Какво е Java
Какво e CLDC и MIDP
●
Преглед на достъпни API
●
Какво е Мидлет
●
LCDUI – Класове и възможности
●
Други важни класове
●
Примерна програма
●
Какво е Java?
●
●
●
Езикът Java
Java editions
–
Standard Edition (J2SE)
–
Enterprise Edition (J2EE)
–
Micro Edition (J2ME)
Java Community Process (JCP)
–
JSR – Java Specification Request
Структура на J2ME
●
CDC – Connected Device Configuration
●
CLDC – Connected Limited Device
Configuration
●
Java Card Technology
CLDC Technology (1/3)
●
●
Connected Limited Device Configuration
(CLDC); JSR 30, JSR 139
Mobile Information Device Profile (MIDP);
JSR 37, JSR 118
●
Information Module Profile, (IMP); JSR 195
CLDC Technology (2/3)
●
Java Technology for the Wireless Industry,
(JTWI); JSR 185
●
Mobile Media API (MMAPI); JSR 135
●
File Connection and PIM API (JSR 75)
●
Location API for J2ME; JSR 179
●
SIP API for J2ME; JSR 180
CLDC Technology (3/3)
●
Security and Trust Services API for J2ME
(SATA); JSR-177
●
Mobile 3D Graphics; JSR-184
●
J2ME Web Services APIs (WSA), JSR-172
●
Bluetooth API JSR-82
●
J2ME Content Handler API (CHAPI) JSR 211
CLDC Версии
●
●
CLDC 1.0 (JSR 30)
–
java.lang
–
java.util
–
java.io
–
javax.microedition.io
CLDC 1.1 (JSR 139)
–
floating point операции
–
Поддръжка на weak reference
–
Подобрения в нишките
MIDP 1.0
●
MIDP 1.0 (JSR 37)
–
javax.microedition.lcdui
–
javax.microedition.lcdui.game
–
javax.microedition.media
–
javax.microedition.midlet
–
javax.microedition.rms
MIDP 2.0
●
MIDP 2.0 (JSR 118)
–
Enhanced user interface
–
Enhanced multimedia/gaming
–
Better connectivity (unbound connections)
–
OTA (over the air) provisioning
–
Better security
Видове устройства
●
MIDP 1.0 / CLDC 1.0
–
●
Nokia, Motorola, Siemens, LG, SE и други.
MIDP 2.0 / CLDC 1.0
–
Новите устройства на Nokia ser. 40, Nokia ser.
60, Siemens 65x, Motorola, SE, и други.
●
MIDP 2.0 / CLDC 1.1
–
Нови устройства от Nokia ser. 60, ser. 80, ser.
90, Siemens 65x, 75x, SE и други.
Optional Packages (1/2)
●
Mobile Media API (MMAPI); JSR 135
●
Mobile 3D Graphics; JSR-184
●
J2ME Web Services APIs, (WSA); JSR 172
●
Bluetooth API (JSR-82)
●
Location API for J2ME; JSR 179
Optional Packages (2/2)
●
SIP API for J2ME; JSR 180
●
Security and Trust Services (SATSA); JSR-177
●
File Connection and PIM API (JSR 75)
API fragmentation
Проблемът:
Твърде много възможни комбинации:
●
Различни размери на екрана и брой цветове
●
Различни медийни формати
●
Connectivity features (sms/ssl/udp)
●
Vendor specific API (Nokia, Siemens и др.)
Решение?
●
●
Разработка на отделни версии на
критичните сегменти код
Използване на “условна компилация”
(j2mepolish, jpp и други).
●
Когато е възможно – използване на най-
ниска версия на API.
JTWI
(JSR 185)
Java Technology for Wireless Industry:
● Стандартизация на минимален набор
от API с цел избягване на
фрагментацията:
CLDC 1.0 (JSR 30) или CLDC 1.1 (JRS 139)
MIDP 2.0 (JSR 118), WMA 1.1 (JSR 120),
MMAPI (JSR 135)
Поддържа се от най-новите устройства на
всички големи производители.
Какво е Midlet Suite
Приложение, написано според MIDP
спецификацията :)
●
●
Съдържа един или повече наследници на
javax.microedition.midlet.MIDlet
class файловете са преминали процес на
верификация
●
Class-файловете са пакетирани в JAR
●
JAD файл с допълнителна информация
Жизнен цикъл на Midlet
Как изглежда кода?
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
public class HelloWorldMidlet extends MIDlet {
public HelloWorldMidlet() {
super();
}
protected void startApp() throws MIDletStateChangeException {
}
protected void pauseApp() {
}
protected void destroyApp(boolean arg0) throws
MIDletStateChangeException {
}
}
JAD
Java Application Descriptor
Съдържа информация за Midlet Suite
● Списък с мидлетите
●
Версия на CLDC и MIDP
●
Производител
●
Адрес за инсталация
●
Размер на JAR файла
Примерен JAD файл (1/2)
MIDlet-1: Hello World,/icon1.png,HelloWorldMidlet
MIDlet-2: Hello World
Canvas,/icon2.png,HelloWorldCanvas
MIDlet-Name: Lecture Midlet Suite
MIDlet-Description: This is just Demo
MIDlet-Jar-URL: http://eternity-logic.com/j2me/Lecture.jar
MIDlet-Jar-Size: 5247
MIDlet-Data-Size: 1024
MIDlet-Version: 1.0.0
MIDlet-Vendor: Eternity Logic
MicroEdition-Profile: MIDP-1.0
MicroEdition-Configuration: CLDC-1.0
Примерен JAD файл (2/2)
MIDlet-Info-URL: http://eternity-logic.com/info/
MIDlet-Install-Notify: http://eternitylogic.com/midlet_install.jsp?name=HelloWorld
MIDlet-Delete-Notify: http://eternitylogic.com/midlet_uninstall.jsp?name=HelloWorld
MIDlet-Delete-Confirm: Are you shure?
MIDlet-Permissions: javax.microedition.io.Connector.http
Property1: Value1
Property2: Value2
Преглед на LCDUI
javax.microedition.lcdui classes
➔
java.lang.Object
➔ Displayable
➔ Display
➔ AlertType
➔ Command
➔ Font
➔ Graphics
➔ Image
➔ Item
➔ Ticker
➔
Item
➔ ChoiceGroup
➔ CustomItem
➔ DateField
➔ Gauge
➔ ImageItem
➔ Spacer
➔ StringItem
➔ TextField
➔
Displayable
➔ Canvas
➔ Screen
➔ Form
➔ List
➔ TextBox
➔ Alert
Interfaces
➔
Choice
•
➔
➔
➔
ChoiceGroup, List
CommandListener
ItemCommandListener
ItemStateListener
Hello World !
public class HelloWorldMidlet extends MIDlet implements CommandListener {
Form helloForm = new Form ("Demo");
Command cmdExit = new Command ("Exit",Command.EXIT,0);
protected void startApp() throws MIDletStateChangeException {
helloForm.append("Hello World!");
helloForm.addCommand(cmdExit);
helloForm.setCommandListener(this);
Display.getDisplay(this).setCurrent(helloForm);
}
public void commandAction(Command cmd,
Displayable displ) {
if (displ==helloForm && cmd==cmdExit) {
Display.getDisplay(this).setCurrent(null);
notifyDestroyed();
}
}
}
Класът StringItem
mainForm.append("This is a simple label");
item = new StringItem("This is a StringItem label: ",
"This is the StringItems text");
mainForm.append(item);
item = new StringItem("Short label: ", "text");
mainForm.append(item);
item = new StringItem("Hyper-Link ", "hyperlink",
Item.HYPERLINK);
mainForm.append(item);
item = new StringItem("Button ", "Button", Item.BUTTON);
mainForm.append(item);
Класът Item
Базов клас за всички класове, чиито
инстанции могат да се добавят във форма
По важни методи:
●
getMinimumHeight(), getMinimumWidth() ,
getPreferredHeight(), getPreferredWidth(),setPreferredSize()
●
notifyStateChanged()
●
AddCommand (), removeCommand (), setDefaultCommand (),
setItemCommandListener
●
notifyStateChanged()
Класът Form
Контейнер за Item subclasses. Методи:
●
append(Image img) , append(Item item), append(String
str), set(int itemNum, Item item)
●
delete(int itemNum), deleteAll()
●
Item get(int itemNum)
●
getHeight(), getWidth()
●
setItemStateListener(ItemStateListener iListener)
The Layout (1/3)
●
●
●
●
●
Не може да се разположи Item на
конкретни координати.
Елементите се показват по техния ред, в
зависимост от имплементацията
Елементите се разползагат в “Редове”
Покзаването може да се управлява чрез
метода setLayout () на класа Item
Алгоритъмът за разползагане разчита на
т.нар. Current Layout
The Layout (2/3)
●
LAYOUT_DEFAULT
●
LAYOUT_NEWLINE_BEFORE
●
LAYOUT_LEFT
●
LAYOUT_NEWLINE_AFTER
●
LAYOUT_RIGHT
●
LAYOUT_SHRINK
●
LAYOUT_CENTER
●
LAYOUT_VSHRINK
●
LAYOUT_TOP
●
LAYOUT_EXPAND
●
LAYOUT_BOTTOM
●
LAYOUT_VEXPAND
●
LAYOUT_VCENTER
●
LAYOUT_2
Класът TextField
Constructor:
TextField(String label, String text,
int maxSize, int constraints)
Sample:
new TextField("Any Character", "", 15, TextField.ANY);
new TextField("E-Mail", "", 15, TextField.EMAILADDR);
new TextField("Number", "", 15, TextField.NUMERIC);
new TextField("Decimal", "", 15, TextField.DECIMAL);
new TextField("Phone", "", 15,TextField.PHONENUMBER);
new TextField("Password", "", 15, TextField.PASSWORD);
new TextField("URL", "", 15, TextField.URL);
Класът ChoiceGroup (1/2)
String[] sa = {"Option A", "Option B",
"Option C", "Option D"};
Image img = Image.createImage (“/pic.img”);
form.append(new ChoiceGroup(
"Exclusive", ChoiceGroup.EXCLUSIVE, sa, img));
form.append(new ChoiceGroup(
"Multiple", ChoiceGroup.MULTIPLE, sa,img));
form.append(new ChoiceGroup(
"Pop-Up", ChoiceGroup.POPUP, sa,img));
Класът Canvas –
директен достъп до екрана
●
Наследниците на Canvas имплементи-рат
метод
protected void paint(Graphics g)
●
●
paint () не се вика директно – извиква се
repaint ()
За директен достъп до екрана се използва
параметъра (Graphics g)
Canvased Hello World!
protected void paint(Graphics g) {
g.drawLine(5,5,30,30);
g.drawString("Hello World!", getWidth()/2, getHeight()/2,
Graphics.TOP | Graphics.HCENTER);
}
CustomItem
Създаване на собствени контроли
●
●
За създаване на собствени контроли се
наследява класа
javax.microedition.lcdui.CustomItem
Задължително се имплементира
void paint(Graphics g, int w, int h);
●
Незадължително
–
traverse, traverseOut, keyPressed,
keyReleased, keyRepeated и други.
Други UI класове (Screen)
●
●
List – Аналог на ChoiceGroup, но се
показва на цял екран
Alert – Показва съобщение на екрана (info,
warning, error и др.)
●
TextBox – Аналог на TextField и също се
показва на цял екран
Други интересни възможности
(RMS)
●
RMS – Record Memory Store
–
–
–
–
–
javax.microedition.rms.RecordStore
Позволява записване на информация върху
мобилното устройство
Представлява номерирано множество от
записи byte []
Всеки запис се чете или записва наведнъж
Записите могат да се филтрират, търсят и
сравняват по дадени признаци
Вход/Изход
●
Пакетът javax.microedition.io
–
javax.microedition.io.Connector – factory за
създаване на Connection обекти
–
Connection – Базов интерфейс за вход/изход
–
Поддържат се HttpConnection, HttpsConnection,
SocketConnection, StreamConnection,
UDPDatagramConnection
Пример за HTTP Вход
HttpConnection httpcon =
(HttpConnection) Connector.open(“http://fun.bg”);
InputStream is = httpcon.openInputStream();
byte [] buff = new byte[128];
int count = -1;
while ((count = is.read(buff))!=-1) {
String text = new String (buff,count);
form.append(text);
}
Демонстрация:
Да направим един Midlet
●
●
Weather Midlet – показва метеорологичните условия в даден град
Използваме web service предоставен от
http://webservicex.net
●
Ще направим заявка, ще изтеглим,
обработим и визуализираме резултата
Формат на заявката и данните
HTTP Get Request:
webservicex.net/globalweather.asmx/GetWeather?
CountryName=Bulgaria&CityName=Sofia
Формат на отговора
Response:
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://www.webserviceX.NET">
<CurrentWeather>
<Location>
Sofia Observ. , Bulgaria (LBSF) 42-39N 023-23E 595M
</Location>
<Time>
Nov 29, 2005 - 04:00 AM EST / 2005.11.29 0900 UTC
</Time>
<Wind>Variable at 2 MPH (2 KT)</Wind>
<Visibility>4 mile(s)</Visibility>
<SkyConditions>mostly clear</SkyConditions>
<Temperature>48 F (9 C)</Temperature>
<DewPoint>41 F (5 C)</DewPoint>
<RelativeHumidity>75%</RelativeHumidity>
<Pressure>29.97 in. Hg (1015 hPa)</Pressure>
<Status>Success</Status>
</CurrentWeather>
</string>
Да напишем кода
●
●
Ще използваме Eclipse
Плъгинът EclipseME ще автоматизира
част от работата
●
За емулатор – WTK 2.2 на Sun
Microsystems
That’s all folks!
Благодаря Ви за вниманието!
Имате ли въпроси?
Related documents