Lập trình mobile - Phần 2

Chia sẻ bởi Nguyễn Bùi Minh Tâm | Ngày 19/03/2024 | 14

Chia sẻ tài liệu: Lập trình mobile - Phần 2 thuộc Công nghệ thông tin

Nội dung tài liệu:

LẬP TRÌNH MOBILE
Căn bản về J2ME
11/20/2009
1
Võ Phương Bình – ITFAC - DLU
Võ Phương Bình – ITFAC - DLU
2
Căn bản về J2ME
J2ME là gì?
Các khái niệm chính của J2ME
Configurations (CLDC, CDC)
Profiles (MIDP)
MIDlet, MIDlet Suite
Các lớp API cơ bản
Cài đặt và sử dụng bộ Toolkit
Lập trình J2ME trên Eclipse
11/20/2009
Võ Phương Bình – ITFAC - DLU
3
Phiên Bản Java
Java gồm có 3 phiên bản.
Mỗi phiên bản cung cấp một mội trường hoàn chỉnh cho việc chạy các ứng dụng Java, bao gồm:
Máy ảo Java (JVM – Java Virtual Machine)
Các lớp thời gian chạy.
3 phiên bản này nhằm tới các ứng dụng khác nhau chạy trên các loại thiết bị khác nhau.
11/20/2009
Võ Phương Bình – ITFAC - DLU
4
Phiên Bản Java (2)
Standard desktop &
workstation applications
Heavy duty server
systems
Small & memory
constrained devices
11/20/2009
Võ Phương Bình – ITFAC - DLU
5
Phiên Bản Java (3)
Mỗi phiên bản định nghĩa tập các thư viện lớp khác nhau.
Có đến hàng ngàn lớp thời gian chạy J2SE chính, khoảng 10-20 MB.
J2ME- có số lớp ít hơn.
11/20/2009
Võ Phương Bình – ITFAC - DLU
6
Kiến Trúc J2ME
Configuration
Yêu cầu nền tối thiểu cho một nhóm thiết bị.
Profile
Đặc tả cần thiết cho một họ thiết bị
11/20/2009
Võ Phương Bình – ITFAC - DLU
7
Các Khái Niệm J2ME
Configurations
Profiles
Optional packages
11/20/2009
Võ Phương Bình – ITFAC - DLU
8
Configurations
Configuration là một môi trường thời gian chạy Java hoàn chỉnh, bao gồm:
Java virtual machine (VM): thực thi Java bytecode
Mã tự nhiên để giao tiếp với hệ thống cơ sở
Tập các lớp thời gian chạy Java chính.
Để sử dụng một configuration, một thiết bị phải đạt được các yêu cầu tối thiểu.
11/20/2009
Võ Phương Bình – ITFAC - DLU
9
Configurations
Connected Limited Device Configuration
Connected Device Configuration
11/20/2009
Võ Phương Bình – ITFAC - DLU
10
So Sánh CLDC & CDC
CLDC
Tổng bộ nhớ:160 - 512 KB
Bộ xử lý:16-bit hoặc 32-bit
Tiêu thụ năng lượng thấp (dùng pin)
Kết nối với băng thông giới hạn
CDC
Tổng bộ nhớ: 2MB hoặc hơn đối với nền(flatform) Java
Bộ xử lý: 32-bit
Kết nối với băng thông mạng cao, thường sử dụng TCP/IP
11/20/2009
Võ Phương Bình – ITFAC - DLU
11
KVM & CVM
KVM – máy ảo Java dành cho cấu hình CLDC
CVM - máy ảo Java dành cho cấu hình CDC
11/20/2009
Võ Phương Bình – ITFAC - DLU
12
CLDC & CDC – Tập con J2SE
CLDC bao gồm các lớp từ:
java.lang
java.io
java.util
Chỉ bao gồm các lớp được chọn từ mỗi package
CDC bao gồm 17 package
Bao gồm cả các lớp trong package chia sẻ
11/20/2009
Võ Phương Bình – ITFAC - DLU
13
CLDC & CDC – Tập con J2SE (2)
11/20/2009
Võ Phương Bình – ITFAC - DLU
14
Các Khái Niệm Chính J2ME (2)
Configurations
Profiles
Optional packages
11/20/2009
Võ Phương Bình – ITFAC - DLU
15
Profiles
Thêm các lớp đặc tả miền cho một configuration:
Để lắp đầy các chức năng còn thiếu
Để hỗ trợ sử dụng đặc tả của một thiết bị
Hầu hết các profiles định nghĩa các lớp giao diện người dùng cho việc xây dựng các ứng dụng tích hợp
Để sử dụng profile, thiết bị phải đáp ứng yêu cầu tối thiểu của configuration và profile cơ sở.
11/20/2009
Võ Phương Bình – ITFAC - DLU
16
Profiles (2)
Mobile Information Device Profile
Personal Digital Assistant Profile
Foundation Profile
Personal Basis Profile
Personal Profile
11/20/2009
Võ Phương Bình – ITFAC - DLU
17
MIDP – MID Profile
MIDP là profile dành cho các MID - Mobile Information Device
Đặc trưng tối thiểu của MID:
Đủ bộ nhớ để chạy các ứng dụng MIDP
Độ phân giải tối thiểu 96 X 56 pixels, màu hoặc trắng đen
Bộ phím: keypad, keyboard, hoặc touch screen
Khả năng mạng không dây 2 chiều
11/20/2009
Võ Phương Bình – ITFAC - DLU
18
MIDP – Đặc tả
Có 2 phiên bản MIDP:
MIDP 1.0 – 9/2000: Nhiều thiết bị trên thì trường hiện tại hỗ trợ
MIDP 2.0 – 11/2003: Nhiều cải tiến vượt bậc so với MIP 1.0
Nâng cấp tính năng bảo mật: HTTPS, kết nối tới server
Thêm các API hỗ trợ Multimedia
Mở rộng các tính năng của Form
Hỗ trợ Game API
Hỗ trợ kiểu ành RGB
11/20/2009
Võ Phương Bình – ITFAC - DLU
19
CÁC KHÁI NIỆM CHÍNH J2ME (3)
Configurations
Profiles
Optional packages
11/20/2009
Võ Phương Bình – ITFAC - DLU
20
Optional Packages
Tập các API hỗ trợ thêm
Độc lập với một cấu hình và một hoặc nhiều profile.
Các optional package:
RMI
Bluetooth
JDBC
11/20/2009
Võ Phương Bình – ITFAC - DLU
21
Chọn Ứng Dụng J2ME
Ứng dụng J2ME là một dạng không rõ ràng (ambiguous term)
Nên chọn cụ thể Configuration, profile và các optional package
Các CDC-based profile giúp phát triển đơn giản hơn J2SE, nhưng không phù hợp với các low-end device
Các CLDC-based profile khó hơn cho việc phát triển, đặc biệt là cố gắng hạn chế kích thước ứng dụng để chạy trên nhiều thiết thị nhỏ
11/20/2009
Võ Phương Bình – ITFAC - DLU
22
MIDlet
Phần quan trọng nhất của J2ME
MIDP không dùng phương thức static main, cũng không gọi phương thức System.exit để thoát ứng dụng
Thay vậy, chúng ta sử dụng MIDlet, một ứng dụng MID Profile
11/20/2009
Võ Phương Bình – ITFAC - DLU
23
MIDlet (2)
Mỗi ứng dụng phải kế thừa lớp javax.microedition.midlet.MIDlet để cho phép phần mềm quản lý ứng dụng:
Quản lý MIDlet
Có thể lấy các đặc trưng từ bộ mô tả ứng dụng
Thông bào và yêu cầu các thay đổi trạng thái
11/20/2009
Võ Phương Bình – ITFAC - DLU
24
MIDlet (3)
Lớp kế thừa là lớp chính của ứng dụng
Lớp MIDlet định nghĩa các phương thức trừu tượng mà lớp chính thực thi như: startApp(), destroyApp(), notifyDestroyed()

11/20/2009
Võ Phương Bình – ITFAC - DLU
25
MIDlet Suite (4)
Một hay nhiều MIDlet được đóng gói vào một MIDlet suite, bao gồm:
JAR (Java archive) file
JAD (Java Application Descriptor) file
Tất cả các lớp người dùng định nghĩa và tài nguyên được cần thiết cho MIDlet Suite nằm trong file JAR
11/20/2009
Võ Phương Bình – ITFAC - DLU
26
MIDlet Suite (5)
File JAR cũng phải chứa file manifest mô tả các MIDlet trong Suite.
File JAD chứa thông tin tương tự, và được sử dụng bởi thiết bị đế lấy thông tin vềmột MIDlet Suite mà không phải download và cài đặt MIDlet Suite
11/20/2009
Võ Phương Bình – ITFAC - DLU
27
Creating a MIDlet
11/20/2009
Võ Phương Bình – ITFAC - DLU
28
Creating a MIDlet
Khai báo các gói đặc tả MIDP
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
11/20/2009
Võ Phương Bình – ITFAC - DLU
29
Creating a MIDlet
Kế thừa MIDlet
Thực thi giao diện CommandListener
public class HelloMIDlet
extends MIDlet
implements CommandListener {

11/20/2009
Võ Phương Bình – ITFAC - DLU
30
Creating a MIDlet
Tạo form, thêm các Command
public HelloMIDlet() {
mMainForm = new Form("HelloMIDlet");
mMainForm.append(new StringItem(null,
"Hello, Seminar Software Design!"));
mMainForm.addCommand(new Command("Exit", Command.EXIT, 0));
mMainForm.setCommandListener(this);
}
11/20/2009
Võ Phương Bình – ITFAC - DLU
31
Các Lớp API Mẫu
MIDlet
Form
Command
CommandListener
ItemCommandListener
Item
11/20/2009
Võ Phương Bình – ITFAC - DLU
32
Các Lớp API Mẫu
MIDlet – Lớp cơ sở
Form
Command
CommandListener
ItemCommandListener
Item
11/20/2009
Võ Phương Bình – ITFAC - DLU
33
Lớp MIDlet
protected abstract void startApp()
protected abstract void pauseApp()
protected abstract void destroyApp(boolean unconditional)
public final String getAppProperty(String key)
public final void notifyDestroyed()
11/20/2009
Võ Phương Bình – ITFAC - DLU
34
Các Lớp API Mẫu (2)
MIDlet
Form
Command
CommandListener
ItemCommandListener
Item
11/20/2009
Võ Phương Bình – ITFAC - DLU
35
Lớp Form
Form là màn hình chứa các thành phần như: image, text field, date field, gauge, choice group, và custom item.
Tổng quát, bất kỳ lớp con nào của lớp Item có thể chứa trong form
Layout, traversal, và scrolling.
11/20/2009
Võ Phương Bình – ITFAC - DLU
36
Lớp Form (2)
Quản lý Item
public int append(Item item)
public Item get(int itemNum)
Layout
public void setItemStateListener(ItemStateListener iListener)
11/20/2009
Võ Phương Bình – ITFAC - DLU
37
Các Lớp API Mẫu (3)
MIDlet
Form
Command
CommandListener
ItemCommadListener
Item
11/20/2009
Võ Phương Bình – ITFAC - DLU
38
Lớp Command
Lớp Command biểu diễn mặc ngữ nghĩa của một hành động
Hành động được thực thi trong đối tượng CommandListener
CommandListener được kết hợp với một Displayable hoặc Item
Một khi Command được gọi –CommandListener được gọi, và hành động đucợ thực thi.
11/20/2009
Võ Phương Bình – ITFAC - DLU
39
Lớp Command (2)
Command label
public String getLabel()
Command type
public int getCommandType()
Command priority
public int getPriority()
11/20/2009
Võ Phương Bình – ITFAC - DLU
40
Lớp CommandListener
Đối tượng này là bộ lắng nghe các Command được đưc vào một Displayable
public void commandAction(Command c, Displayable d)
11/20/2009
Võ Phương Bình – ITFAC - DLU
41
Lớp ItemCommandListener
Khi một Command (được đưa vào một Item) được gọi, ứng dụng được thông báo có commandAction() được gọi trong ItemCommandListener
public void commandAction(Command c, Item item)
11/20/2009
Võ Phương Bình – ITFAC - DLU
42
Các Lớp API Mẫu (4)
MIDlet
Form
Command
CommandListener
ItemCommandListener
Item
11/20/2009
Võ Phương Bình – ITFAC - DLU
43
Lớp Item
Lớp cha của các thành phần có thể được thêm vào Form.
Tất cả các đối tượng Item có một trường label
Layout, size, và appearance
Thêm vào các Command
11/20/2009
Võ Phương Bình – ITFAC - DLU
44
Lớp Item (2)
public void setDefaultCommand(Command cmd)
public void setItemCommandListener(ItemCommandListener listener)
public void notifyStateChanged()
public int getPreferredWidth()
11/20/2009
Võ Phương Bình – ITFAC - DLU
45
Cài đặt và sử dụng bộ Toolkit
Bước 1: Download sun’s J2ME Wireless Toolkit từ: http://java.sun.com/products/j2mewtoolkit/download-2_1.html
Bước 2: Kiểm tra J2SE SDK đã được cài đặt
Bước 3: Cài đặt J2ME Toolkit.
11/20/2009
Võ Phương Bình – ITFAC - DLU
46
Sau Khi Cài Đặt
Shortcut trên menu Start:




Thư mục chứa
chương trình:
11/20/2009
Võ Phương Bình – ITFAC - DLU
47
Sử Dụng KToolbar
11/20/2009
Võ Phương Bình – ITFAC - DLU
48
Tạo Một Ứng Dụng
Chọn “FileNew Project”
Nhập tên project và lớp MIDlet
Một thư mục mới chứa project sẽ tự động được tạo


11/20/2009
Võ Phương Bình – ITFAC - DLU
49
Thư Mục Được Tạo Ở Đâu?
11/20/2009
Võ Phương Bình – ITFAC - DLU
50
Và Sau Đó…
Chọn platform
Viết code
Save
Build
(Compile + Preverify)
Run
11/20/2009
Võ Phương Bình – ITFAC - DLU
51
Lập Trình J2ME Trên Eclipse
Eclipse
Thiết kế theo mô hình platform
Kiến trúc mở cho phép gắn các plugin để sử dụng các công cụ cần thiết
EclipseMe
Plugin dành riêng cho phát triển ứng dụng J2ME
Thừa hưởng đầy đủ các tính năng của Java IDE từ Eclipse.
11/20/2009
Võ Phương Bình – ITFAC - DLU
52
Cài Đặt EclipseMe
Bước 1: Download tại địa chỉ
Eclipse: http://www.eclipse.org
EclipseME: http://www.sourceforge.net/projects/eclipseme
Bước 2: Kiểm tra yêu cầu
Để chạy được EclipseME, cần phải có J2ME Wireless Toolkit (WTK) 1.0, JDK 1.4 và Eclipse 3.0M9 trở lên.
Bước 3: Cài đặt EclipseMe
Để cài đặt EclipseMe, chỉ cần giải nén file zip đến thư mục plugins của Eclipse
11/20/2009
Võ Phương Bình – ITFAC - DLU
53
Cài Đặt EclipseMe (2)
Bước 4: Khởi động Eclipse
Menu Window -> Preferences. Mở rộng mục J2ME, chọn mục Platform Components.
Trong khung bên phải, kích chuột phải vào mục Wireless Toolkits, kích vào Add Wireless Toolkit.
Cửa sổ hiện ra yêu cầu bạn chọn thư mục cài đặt WTK. Nhấn nút Browse và chọn thư mục WTK đã cài đặt.
Nhất Finish rồi nhấn OK. Quá trình cài đặt và cấu hình đã hoàn tất.
11/20/2009
Võ Phương Bình – ITFAC - DLU
54
Cài Đặt EclipseMe (3)
11/20/2009
Võ Phương Bình – ITFAC - DLU
55
Tạo Project J2ME
Menu File -> New -> Project
Mở rộng mục J2ME, chọn J2ME MIDlet Suite. Nhấn Next.
Gõ tên project (ví dụ HelloWorld) và chọn thư mục chứa project (ví dụ C:projectsJ2ME). Nhấn Next.
Chọn nền WTK. Nhấn Next.
Có thể thêm các thư viện cần dùng, thêm thư mục chứa source v.v… Cũng có thể để mọi thứ theo mặc định.
Nhấn Finish để kết thúc quá trình tạo J2ME project.
11/20/2009
Võ Phương Bình – ITFAC - DLU
56
Tạo MIDlet
Trong khung Navigator, kích chuột phải trên J2ME project (theo ví dụ ở trên là HelloWorld).
Chọn New -> Other.
Mở rộng mục J2ME, chọn J2ME Midlet. Nhấn Next.
Nhập tên gói chứa MIDlet trong mục package, ví dụ: edu.eclipseme.helloworld
Nhập tên lớp MIDlet trong mục Name, ví dụ: HelloWorldMIDlet.
Nhấn Finish để kết thúc quá trình tạo MIDlet
11/20/2009
Võ Phương Bình – ITFAC - DLU
57
Chương Trình HelloWorldMIDlet
Chương trình sẽ vẽ một dòng chữ Hello World in đậm màu đỏ ở giữa màn hình điện thoại.
Trước khi in dòng chữ, chương trình hiển thị một màn hình intro trong 30 giây với một hình ảnh dạng png làm logo.
11/20/2009
Lớp HelloCanvas
package eclipseme.HelloWorld;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
public class HelloCanvas extends Canvas
{
protected void paint(Graphics g)
{
clearScreen(g);
paintHello(g);
}
private void clearScreen(Graphics g)
{
g.setColor(0xFFFFFF);
g.fillRect(0, 0, getWidth(), getHeight());
}

private void paintHello(Graphics g)
{
String hello = "Hello World";
g.setColor(0xFF0000);
Font font = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_MEDIUM);
g.setFont(font);
int x = (getWidth() - font.stringWidth(hello)) / 2;
int y = (getHeight() - font.getHeight()) / 2;
g.drawString(hello, x, y, Graphics.TOP | Graphics.LEFT);
}
}
11/20/2009
Võ Phương Bình – ITFAC - DLU
58
Lớp IntroCanvas
package eclipseme.HelloWorld;
import java.io.IOException;
import java.util.Timer;
import java.util.TimerTask;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
public class IntroCanvas extends Canvas{
private static final String logoName = "/Images/image.png";
private Display display;
private Displayable nextScreen;
private int timeout;
private Timer timer = new Timer();

public IntroCanvas(Display display, Displayable nextScreen, int timeout){
this.display = display;
this.nextScreen = nextScreen;
this.timeout = timeout;
}
public void startIntro(){
display.setCurrent(this);
}
public void endIntro(){
display.setCurrent(nextScreen);
}
11/20/2009
Võ Phương Bình – ITFAC - DLU
59
Lớp IntroCanvas (2)
protected void paint(Graphics g) {
try {
Image logo = Image.createImage(logoName);
g.drawImage(logo, 0, 0, Graphics.TOP | Graphics.LEFT);
}
catch (IOException e) {
g.drawString("Logo Error", 0, 0, Graphics.TOP | Graphics.LEFT);
}
}
protected void showNotify() {
timer.schedule(new CountDown(), timeout);
}
protected void keyPressed(int keyCode) { endIntro();}

private class CountDown extends TimerTask {
public void run() {endIntro();}
}
11/20/2009
Võ Phương Bình – ITFAC - DLU
60
Lớp HelloWorldMIDlet
package eclipseme.HelloWorld;
import javax.microedition.lcdui.Display;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class HelloWorldMIDlet extends MIDlet {
private Display display;
private IntroCanvas introCanvas;
private HelloCanvas helloCanvas;
public HelloWorldMIDlet() {
super();
}
protected void startApp() throws MIDletStateChangeException {
display = Display.getDisplay(this);
helloCanvas = new HelloCanvas();
introCanvas = new IntroCanvas (display, helloCanvas, 3000);
introCanvas.startIntro(); }
protected void pauseApp() { }
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {}
}
11/20/2009
Võ Phương Bình – ITFAC - DLU
61
* Một số tài liệu cũ có thể bị lỗi font khi hiển thị do dùng bộ mã không phải Unikey ...

Người chia sẻ: Nguyễn Bùi Minh Tâm
Dung lượng: | Lượt tài: 0
Loại file:
Nguồn : Chưa rõ
(Tài liệu chưa được thẩm định)