1. Trang chủ
  2. » Luận Văn - Báo Cáo

lập trình ứng dụng trên thiết bị di động

70 662 2
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Lập Trình Ứng Dụng Trên Thiết Bị Di Động
Tác giả Khúc Thanh Sơn
Người hướng dẫn ThS Đào Ngọc Phong, PGS TS Hồ Sĩ Đàm
Trường học Đại Học Công Nghệ, Đại Học Quốc Gia Hà Nội
Chuyên ngành Công nghệ thông tin
Thể loại Khoa luận tốt nghiệp đại học
Năm xuất bản 2010
Thành phố Hà Nội
Định dạng
Số trang 70
Dung lượng 3,91 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Chương 1: Tổng quan về lập trình trên thiết bị di động Chương này sẽ nói sơ lược về thực tại các ứng dụng trên di động, các đặc điểm cũng như công nghệ, các công cụ lập trình khác nhau.

Trang 1

ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

Khúc Thanh Sơn

LẬP TRÌNH ỨNG DỤNG TRÊN THIẾT BỊ DI ĐỘNG

KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY

Ngành: Công nghệ thông tin

HÀ NỘI – 2010

Trang 2

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

Khúc Thanh Sơn

LẬP TRÌNH ỨNG DỤNG TRÊN THIẾT BỊ DI ĐỘNG

KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY

Ngành: Công nghệ thông tin

Cán bộ hướng dẫn: ThS Đào Ngọc Phong Cán bộ đồng hướng dẫn: PGS TS Hồ Sĩ Đàm

HÀ NỘI – 2010

Trang 3

Sau một thời gian tập trung nghiên cứu và thực hiện, em đã hoàn thành xong luận văn của mình Đây là kết quả của một quá trình lao động và học tập nghiêm túc dựa trên kiến thức mà em đã thu thập được dưới sự truyền dạy của quý thầy cô Em xin gửi lời tri ân sâu sắc nhất đến toàn thể quý thầy cô khoa Công nghệ thông tin – Đại học Công nghệ – Đại học Quốc Gia Hà Nội trong suốt thời gian qua

Hơn ai hết, em có thể ý thức rằng luận văn của mình khó có thể hoàn thành tốt nếu thiếu sự đôn đốc, hướng dẫn tận tình của thầy – Thạc sỹ Đào Ngọc Phong và thầy – PGS TS Hồ Sĩ Đàm Em xin gửi lời cám ơn chân thành nhất tới sự chỉ bảo của hai thầy

Em cũng xin cảm ơn các anh chị đi trước cùng toàn thể bạn bè vì sự động viên ủng hộ trong suốt thời gian nghiên cứu và thực hiện đề tài

Mặc dù đã nỗ lực hết mình để hoàn thành đề tài tốt nhất trong khả năng cho phép, nhưng do kiến thức của bản thân còn hạn hẹp và qui mô của khối lượng công việc mà thời gian có hạn nên những thiếu sót là không thể tránh khỏi Rất mong nhận được sự chỉ bảo cũng như góp ý chân thành của quý thầy cô, anh chị và các bạn

Khúc Thanh Sơn

Trang 4

TÓM TẮT NỘI DUNG

Ngày nay, ngôn ngữ J2ME và lập trình trên thiết bị di động nói chung đang ngày càng phát triển rộng rãi đi kèm với sự bùng nổ về thị trường điện thoại di động Cùng với sự gia tăng về số lượng di động thì các tính năng dành cho di động cũng tăng theo tương ứng Hàng loạt các tính năng cao cấp được giới thiệu như chụp hình, nghe nhạc… và đặc biệt là sử dụng các chương trình không phải do nhà sản xuất điện thoại cung cấp Đây được coi là cuộc cách mạng trong lĩnh vực di động, nó biến chiếc điện thoại nhỏ bé thành một chiếc máy tính thu nhỏ, với những chủng loại điện thoại này ta

có thể đọc báo, tiểu thuyết, tra từ điển, bản đồ và nhất là mang cả thế giới giải trí đến bên cạnh, những bản nhạc hay, những game hay luôn luôn sẵn sàng để sử dụng Để góp phần cho sự phát triển đó ngoài yếu tố phần cứng thì nền tảng phần mềm là yếu tố quyết định vì các hãng sản xuất di động khác nhau thì sử dụng công nghệ khác nhau Làm sao để các thiết bị phần cứng khác nhau có thể sử dụng chung một nền tảng phần mềm? Đó chính là nền tảng J2ME Và đây cũng được coi là một trong những lợi thế rất lớn của J2ME

Trong đề tài của mình,em sẽ đi nghiên cứu về công nghệ J2ME và cách thức sử dụng J2ME để lập trình trên di động.Bản báo cáo khóa luận của em được trình bày theo 4 chương với nội dung cụ thể như sau:

1 Chương 1: Tổng quan về lập trình trên thiết bị di động

Chương này sẽ nói sơ lược về thực tại các ứng dụng trên di động, các đặc điểm cũng như công nghệ, các công cụ lập trình khác nhau

2 Chương 2: Giới thiệu về ngôn ngữ J2ME

Chương này sẽ nói về lịch sử hình thành, các phiên bản và các đặc điểm của ngôn ngữ J2ME

3 Chương 3: Công nghệ lập trình trên di động J2ME

Chương này sẽ giới thiệu về kiến trúc của J2ME, các lớp dùng trong J2ME

4 Chương 4: Xây dựng ứng dụng thử nghiệm trên di động

Chương này sẽ giới thiệu về ứng dụng sẽ làm, quá trình làm, cách cài đặt và sử dụng

Trang 5

Mục lục

Bảng các chữ viết tắt và thuật ngữ được sử dụng 7

Danh sách hình vẽ 8

Danh sách các bảng 9

Chương 1 TỔNG QUAN VỀ LẬP TRÌNH TRÊN THIẾT BỊ DI ĐỘNG 10

1.1 Thực tế các ứng dụng trên thiết bị di động 10

1.2 Đặc điểm của lập trình ứng dụng trên thiết bị di động 11

1.3 Các công nghệ khác 11

Chương 2 GIỚI THIỆU VỀ J2ME 13

2.1 Lịch sử hình thành 13

2.2 Các phiên bản, đặc điểm 14

2.3 Các đặc điểm khác 15

2.4 Lý do chọn J2ME 16

Chương 3 CÔNG NGHỆ LẬP TRÌNH TRÊN DI ĐỘNG J2ME 18

3.1 Kiến trúc của J2ME 18

3.1.1 Configurations 18

3.1.2 Định nghĩa về Profile: 21

3.1.3 Máy ảo Java 22

3.2 Các lớp thông dụng trong J2ME 24

3.2.1 Cấu trúc cơ bản 24

3.2.2 Xây dựng một ứng dụng MIDlet 26

3.2.3 Lớp MIDlet 26

3.2.4 Lớp MIDletStateChangeException 28

3.2.5 Lớp Display 29

3.2.6 Lớp Displayable 30

3.2.7 Lớp Command và CommandListener 31

3.2.8 Lớp Item và ItemStateListener 34

3.3 Các lớp giao diện trong J2ME 36

3.3.1 Screen 37

3.3.2 Form 38

3.3.3 Item 39

3.3.4 StringItem 40

3.3.5 Image and ImageItem 40

3.3.6 Canvas 43

3.3.7 Graphics 45

Chương 4 XÂY DỰNG ỨNG DỤNG THỬ NGHIỆM TRÊN DI ĐỘNG 47

4.1 Giới thiệu về ứng dụng 47

4.2 Các chức năng chính 47

Trang 6

4.2.2 Xem slide 48

4.2.3 Trợ giúp 49

4.2.4 Liên hệ 49

4.2.5 Download 49

4.3 Cách thức làm chương trình 49

4.4.1 Yêu cầu phần mềm 52

4.4.2 Cài đặt phần mềm 53

4.4.2.1 Cài đặt JDK 53

4.4.2.2 Cài đặt Sun J2ME Wireless Toolkit 2.5 (WTK 2.5) 55

4.4.3 Chạy thử nghiệm chương trình 57

4.4.3.1 Cách tạo một Project trên Sun J2ME Wireless Toolkit 2.5 57

4.4.3.2.1 Giao diện khi khởi động xong chương trình 60

4.4.3.2.2 Giao diện Menu chính của chương trình 61

4.4.3.2.3 Giao diện Xem Album 62

4.4.3.2.4 Giao diện Xem Slide 63

4.4.3.2.5 Giao diện Trợ giúp 64

4.4.3.2.6 Giao diện Liên hệ 65

4.4.3.2.7 Giao diện Download 66

4.4.3.2.8 Giao diện khi tắt chương trình 67

4.4.4 Tạo file Jar dùng để lưu trữ và chia sẻ 68

KẾT LUẬN 69

Tài liệu tham khảo 70

Trang 7

Bảng các chữ viết tắt và thuật ngữ được sử dụng

CLDC Connected Limited Device Configuration

Configuration Đặc tả quy định các thư viện gốc J2ME phải hỗ trợ cho một

dòng phần cứng J2EE Java 2 Enterprise Edition,dành cho các dự án lớn J2ME Java 2 Micro Edition,dành cho các thiết bị nhỏ J2SE Java 2 Standard Edition,dành cho PC thông thường

KVM K Virtual Machine-máy ảo cho môi trường CLDC MIDlet Tên gọi chung của các ứng dụng J2ME

MIDP Mobile Information Device Profile

Profile Các tập thư viện cấp cao định nghĩa trên nền Configuration

Trang 8

Danh sách hình vẽ

Hình 1 Các đặc điểm của ngôn ngữ J2ME 15

Hình 2 Các thành phần của J2ME 18

Hình 3 Configurations và các thiết bị 20

Hình 4 So sánh Profile thông thường và Profile mở rộng 22

Hình 5 Cấu trúc chương trình J2ME 23

Hình 6 Cấu trúc chương trình MIDP 24

Hình 7 Mô hình vòng đời của một MIDlet 25

Hình 8 Command Exit 32

Hình 9 Ví dụ về cách khởi tạo của hàm Command 32

Hình 10 Sơ đồ các lớp giao diện của J2ME 37

Hình 11 Sơ đồ tổng quan giao diện chương trình 48

Hình 12 Màn hình bắt đầu cài đặt JDK 53

Hình 13 Quá trình JDK đang tiến hành cài đặt 54

Hình 14 Quá trình cài đặt kết thúc 54

Hình 15 Màn hình khi bắt đầu cài đặt WTK 2.5 55

Hình 16 Bước cài đặt WTK tiếp theo 55

Hình 17 Đường dẫn cài đặt WTK 2.5 56

Hình 18 Quá trình xử lý khi cài đặt WTK 2.5 56

Hình 19 Quá trình cài đặt WTK 2.5 kết thúc 57

Hình 20 Màn hình mở WTK 2.5 57

Hình 21 Giao diện ban đầu của WTK 58

Hình 22 Cửa sổ tạo New Project trong WTK 58

Hình 23 Cửa sổ cấu hình cho MIDlet 59

Hình 24 Giao diện khi Build và Run chương trình 59

Hình 25 Giao diện khi khởi động chương trình 60

Hình 26 Giao diện Menu chính của chương trình 61

Hình 27 Giao diện Xem Album 62

Hình 28 Giao diện Xem Slide 63

Hình 29 Giao diện Trợ giúp 64

Hình 30 Giao diện Liên hệ 65

Hình 31 Giao diện Download 66

Hình 32 Giao diện khi tắt chương trình 67

Hình 33 Cửa sổ WTK khi tạo file Jar 68

Hình 34 Cửa sổ Build file Jar của WTK 68

Hình 35 Hình ảnh thư mục bin chứ file Jar của Chương trình 68

Trang 9

Danh sách các bảng

Bảng 1 So sánh thông số kỹ thuật của CDC và CLDC 20

Bảng 2 Các hàm thường dùng trong MIDlet 27

Bảng 3 Một số hàm quan trọng của lớp Display 29

Bảng 4 Các hàm chính của Displayable 31

Bảng 5 Các TYPE hỗ trợ của lớp Command 33

Bảng 6 Các hàm chính của lớp Command và CommandListener 34

Bảng 7 Các hàm quan trọng của lớp Item 35

Bảng 8 Các phương thức và chức năng tương ứng của lớp Screen 38

Bảng 9 Các phương thức và chức năng tương ứng của lớp Form 39

Bảng 10 Các phương thức và chức năng tương ứng của lớp Item 40

Bảng 11 Các phương thức và chức năng tương ứng của StringItem 40

Bảng 12 Các phương thức và chức năng của lớp Image 41

Bảng 13 Các phương thức và chức năng của lớp Image 42

Bảng 14 Các phương thức hỗ trợ vẽ của lớp Canvas: 44

Bảng 15 Các phương thức và chức năng của lớp Graphics: 46

Trang 10

Chương 1 TỔNG QUAN VỀ LẬP TRÌNH TRÊN THIẾT BỊ DI ĐỘNG

1.1 Thực tế các ứng dụng trên thiết bị di động

Mạng điện thoại di động xuất hiện đầu tiên ở Việt Nam vào đầu những năm

1990 và theo thời gian số lượng thuê bao cũng như các nhà dịch vụ di động tại Việt Nam cũng tăng dần Cùng với sự phát triển về số lượng thuê bao di động là sự đa dạng hóa các dịch vụ hướng đến thiết bị di động Ngày nay điện thoại di động không chỉ còn mang chức năng gọi điện hay nhắn tin thông thường nữa mà còn là một thiết bị giải trí, tra cứu thông tin rất tiện lợi Do đó, xây dựng các ứng dụng cho thiết bị di động đang

là một yêu cầu tất yếu trong xu thế hiện nay Ngành công nghiệp phần mềm cho các thiết bị di động được xem là mảnh đất màu mỡ và hứa hẹn đem lại lợi nhuận rất cao

Về chương trình ứng dụng, tính khả thi và thực tế ngày càng được đề cao Với thực trạng Việt Nam hiện nay, số người sở hữu máy tính cá nhân, đặc biệt là sở hữu laptop chưa nhiều nhưng số người có điện thoại di dộng là rất nhiều.Vì thế việc phát triển các ứng dụng di động sẽ là một hướng phát triển màu mỡ, nhằm tạo sự tiện lợi cho người sử dụng, cũng như là tiết kiệm chi phí và thời gian

Hiện nay có rất nhiều các ứng dụng trên di động ta đang sử dụng hàng ngày như game,phần mềm chạy nhạc, phần mềm quản lý ảnh, quản lý bản đồ, chát, tin nhắn…và

đa số các ứng dụng đều chạy trên nền Java và được lập trình bằng ngôn ngữ J2ME, một ngôn ngữ rất mạnh về lập trình ứng dụng cho thiết bị di động Nếu máy điện thoại

có kết nối GPRS, thì ta còn có thể down về rất nhiều các tiện ích cũng như các ứng dụng mà trong máy không có sẵn như là tải nhạc, tải hình cũng như là các game…Qua

đó ta có thể thấy tầm quan trọng của các ứng dụng trên thiết bị di động, nếu thiếu chúng các thiết bị di động sẽ thiếu đi rất nhiều tính năng và cũng sẽ giảm đi hiệu quả làm việc!

Trang 11

1 2 Đặc điểm của lập trình ứng dụng trên thiết bị di động

Ngôn ngữ sử dụng chủ yếu để lập trình các ứng dụng trên thiết bị di động là J2ME Ngôn ngữ J2ME có kích thước nhỏ gọn, tiện dụng, được hỗ trợ bởi hầu hết các thế hệ điện thoại mới ra đời, kể cả các hệ điện thoại cũ J2ME không những là một ngôn ngữ hướng đến các thiết bị di động mà còn là một ngôn ngữ chính để lập trình trên các thiết bị gia dụng, thẻ tín dụng điện tử và các thiết bị thông minh khác

J2ME là một ngôn ngữ nhỏ, gọn nhưng rất chặt chẽ và dễ nắm bắt, với những lập trình viên đã có kinh nghiệm với Java thì việc lập trình J2ME trở nên rất dễ dàng J2ME còn được các tổ chức mã nguồn mở ủng hộ mạnh mẽ và phát triển nhanh chóng

1.3 Các công nghệ khác

Hai hướng phát triển ứng dụng trên điện thoại di động phổ biến hiện nay là C++ trên hệ điều hành Symbian và J2ME Các ứng dụng viết trên nền Symbian có ưu thế là truy cập trực tiếp tài nguyên của điện thoại cũng như là hỗ trợ hệ thống tập tin, thư mục, như máy tính cá nhân vì được hỗ trợ bởi hệ điều hành Tuy nhiên hệ điều hành Symbian lại có kích thước khá lớn nên chỉ có ở các thế hệ điện thoại tương đối cao cấp, và xây dựng ứng dụng dùng Symbian API cũng phức tạp hơn

Ngoài ra còn có 1 công nghệ khác đó là lập trình trên Android."Android là một

hệ điều hành dành cho di động sử dụng Linux Kernel",nhưng nó giống 1 "nền tảng" hơn vì ngoài các chức năng của một hệ điều hành, Google đã trang bị cho Android những "vũ khí tối tân nhất" mà theo quan điểm của những người sáng tạo ra Android

đã từng khẳng định "đó sẽ là một nền tảng vừa mạnh mẽ vừa linh hoạt"

Năm 2005, Google mua lại công ty Android, một công ty nhỏ có trụ sở tại California, Mỹ Sau khi chuyển sang cho Google, nhóm phát triển do Rubin làm Leader bắt đầu phát triển một nền tảng (Platform) dựa trên Linux Kernel dành riêng

Trang 12

cho di động, một nền tảng đủ mạnh mẽ và mềm dẻo để cạnh tranh với các nền tảng di động khác Đồng thời, Google cũng bắt đầu lên kế hoạch cho các đối tác để chế tạo phần cứng và viết các phần mềm trên nển tảng mới của mình

Như đã trình bày ở phần trên, J2ME có lẽ công nghệ lập trình cho di động gọn nhẹ và tiện dụng nhất, nên hiện nay hầu hết các nhà lập trình hay các công ty về di động đều sử dụng công nghệ J2ME là chủ yếu!

Trang 13

Chương 2 GIỚI THIỆU VỀ J2ME

2.1 Lịch sử hình thành

Java là một công nghệ được hãng Sun Microsystems xây dựng đầu tiên với cái tên Oak và hiện nay đang phát triển vượt bậc với sự đóng góp của hàng vạn lập trình viên trên thế giới Ban đầu, Oak được kỹ sư James Gosling và các cộng sự xây dựng với mục đích lập trình cho các mặt hàng điện dân dụng với mục tiêu nhỏ gọn và tương thích được với nhiều loại thiết bị phần cứng khác nhau Sau đó Oak được sử dụng trong nhiều dự án như dự án Xanh (Blue Project), dự án Phim theo yêu cầu (Video on demand Project) Sau một chuyến du lịch tới đảo Java của Indonesia, nhóm phát triển Oak đã đổi tên Oak thành Java

Java mà tiền thân là Oak được xây dựng chủ yếu dựa trên bộ công cụ phát triển (Java Development Kit - JDK) như là bộ thư viện chuẩn trong đó chứa trình biên dịch, trình thông dịch, trình đóng gói, tài liệu,… Đây chính là nền tảng cho việc phát triển các ứng dụng Java

J2ME là một nhánh của ngôn ngữ lập trình JAVA được phát triển nhằm hướng tới việc lập trình cho các thiết bị nhỏ (micro) có bộ nhớ, khả năng hiển thị và xử lý hạn chế

Ban đầu Java được xây dựng chỉ có một phiên bản duy nhất, ngay nay được biết đến với cái tên J2SE (Java 2 Standard Edition), với phương châm “viết một lần, dùng trên mọi môi trường” (“Write one,run anywhere”) Java hình thành trên ý tưởng xây dựng một ngôn ngữ mà lập trình viên viết một lần duy nhất nhưng ứng dụng có thể chạy trên bất kỳ môi trường nào có hỗ trợ máy ảo Java (Java Virtual Machine) Để làm được việc này, Java sử dụng một phương thức biên dịch mã nguồn tương đối khác so với các ngôn ngữ lập trình truyền thống Bộ biên dịch Java không biên dịch

mã nguồn trực tiếp sang mã máy mà biên dịch sang một dạng mã trung gian mà máy

Trang 14

ảo Java có thể hiểu được (mã bytecode) Khi có nhu cầu sử dụng ứng dụng, máy ảo Java sẽ đọc mã trung gian này và dịch ra mã máy và thực thi Nhờ quá trình trung gian đó,một ứng dụng Java có thể chạy trên bất kỳ môi trường nào có cài đặt máy ảo Java tương thích

Được giới thiệu vào năm 1995, ngày nay mục tiêu của Java nhắm đến cũng thay đổi khá nhiều Java hiện nay không chỉ nhắm đến máy tính để bàn đơn thuần, hai năm sau ngày đầu ra mắt, một phiên bản Java mới là J2EE (Java 2 Enterprise Edition) đã được giới thiệu nhằm đến việc phát triển các ứng dụng có quy mô lớn hơn

Phiên bản mới nhất được thêm vào dòng ngôn ngữ Java là J2ME (Java 2 Micro Edition) J2ME nhắm đến việc phát triển ứng dụng cho các ứng dụng có năng lực hạn chế như đầu giải mã kỹ thuật số TV set-top boxes,thiết bị di động…

2.2 Các phiên bản, đặc điểm

J2SE (Java 2 Platform, Standart Edition): Phiên bản chuẩn gồm bộ

công cụ thông dụng dùng để chạy trên các máy PC hoặc các mạng máy tính

nhỏ

J2EE (Java 2 Platform, Enterprise Edition): Phiên bản dành cho các

máy chủ với bộ nhớ lớn Bao gồm các kiến trúc nâng cao như Web, EJB,

Transaction,… dùng để xây dựng các ứng dụng có quy mô lớn

J2ME (Java 2 Platform, Micro Edition): Bao gồm môi trường và thư

viện Java dùng để phát triển các ứng dụng trên các thiết bị có bộ nhớ nhỏ như

điện thoại di động, PDA, các đồ gia dụng,…

Trang 15

2.3 Các đặc điểm khác

J2ME được phát triển từ kiến trúc JavaCard, EmbededJava và PersonalJava của phiên bản Java 1.1 Đến sự ra đời của phiên bản Java 2 thì Sun quyết định thay thế PersonalJava bằng một phiên bản mới có tên Java 2 Micro Edition, viết tắt là J2ME J2ME được sử dụng cho các thiết bị nhỏ gọn với dung lượng bộ nhớ bé và khả năng

xử lý thấp

Mục tiêu của Java là cho phép người lập trình viết các ứng dụng độc lập với thiết bị di động, không cần quan tâm đến phần cứng thật sự Để làm được

như thế, J2ME được xây dựng bằng các tầng khác nhau để che giấu đi việc

tương tác trực tiếp với phần cứng của thiết bị Các tầng của J2ME được xây

dựng trên CLDC (Connected Limited Device Configuration):

Trang 16

Tầng Phần cứng thiết bị (Device Hardware Layer): Đây là thiết bị di

động thật sự với bộ nhớ và tốc độ xử lý cụ thể Các thiết bị di động khác nhau

có thể có bộ vi xử lý và các tập lệnh rất khác nhau Mục tiêu của J2ME là cung cấp cho lập trình viên khả năng giao tiếp giống nhau với tất cả các loại thiết bị di động khác nhau

Tầng máy ảo Java (Java Virtual Machine Layer): Đây là tầng đóng vai

trò thông ngôn giữa chương trình và thiết bị Nó sẽ thông dịch các mã bytecode (mã có được sau khi biên dịch mã nguồn chương trình) thành mã máy của các thiết bị di động Tầng này bao gồm KVM (K Virtual Machine) là bộ biên dịch mã bytecode thành mã máy Nó cung cấp một sự chuẩn hóa cho các thiết bị di động để ứng dụng J2ME sau khi biên dịch có thể chạy được trên bất kỳ thiết bị di động nào hỗ trợ KVM

Tầng cấu hình (Configuration Layer): Tầng này cung cấp các hàm API cơ bản là nhân của J2ME Lập trình viên có thể sử dụng các lớp và các phương thức của các API này tuy nhiên nó không thực sự phong phú bằng tập API của tầng hiện trạng

Tầng hiện trạng (Profile Layer): Tầng này cung cấp các hàm API hữu dụng hơn cho việc lập trình Mục đích của tầng này xây dựng nên lớp cấu hình và cung cấp nhiều thư viện ứng dụng hơn

Trang 17

ngày càng tăng cao và được đánh giá là một ngành công nghệ có thể đem lại nhiều đô

la doanh thu Một thực tế đặc ra cho các nhà phát triển trên các thiết bị này là hiện nay không có một chuẩn hóa nào dành cho các nhà sản xuất phần cứng Các thiết bị hiện nay trên thị trường rất đa dạng và mang nhiều đặc điểm cũng như cấu hình khác nhau Trên thực tế đó, việc chạy trên nhiều môi trường là một lợi thế rất lớn của ngôn ngữ Java Các nhà phát triển Java đã cho ra đời ngôn ngữ J2ME hướng đến việc phát triển phần mềm cho các thiết bị di động Ngôn ngữ J2ME thực sự là một ngôn ngữ nhỏ gọn,

dễ nắm bắt, chặt chẽ và thích hợp với các thiết bị có khả năng hạn chế Các thiết bị di động trên thị trường hiện nay, đặc biệt là điện thoại di động hầu hết đều hỗ trợ rất tốt ngôn ngữ J2ME và J2ME đã trở thành một trong những ngôn ngữ phổ biến nhất trong lĩnh vực lập trình di động

Một số thiết bị hỗ trợ J2ME chúng ta hay gặp như:

-Các lọai thẻ cá nhân như Java Card

-Máy điện thoại di động

-Máy PDA (Personal Digital Assistant - thiết bị trợ giúp cá nhân)

-Các hộp điều khiển dành cho tivi, thiết bị giải trí gia dụng …

Trang 18

Chương 3 CÔNG NGHỆ LẬP TRÌNH TRÊN DI ĐỘNG J2ME

3.1 Kiến trúc của J2ME

Hình 2 Các thành phần của J2ME

Khái niệm thiết bị di động là tương đối rộng lớn Chúng bao hàm các thiết bị có kích thước vật lý khác nhau nhiều lần và cho dù cùng kích thước những thiết bị này vẫn có khả năng xử lý cũng như hiển thị khác nhau (những chiếc điện thoại hiển thị 12000pixels cho đến những PDA là 20000pixels) Để đáp ứng được nhu cầu khác nhau của những thiết bị này,bản thân ngôn ngữ J2ME cũng được chia thành các thành phần nhỏ hơn Chúng ta sẽ tìm hiểu 2 khái niệm Configurations và Profiles

3.1.1 Configurations

Định nghĩa về Configuration (Cấu hình): là đặc tả định nghĩa một môi trường phần mềm cho một dòng các thiết bị được phân loại bởi tập hợp các đặc tính, ví dụ như:

Trang 19

ra có thể mang tính độc lập thiết bị cao nhất có thể Ví dụ như một lập trình viên viết chương trình game cho điện thoại Samsung thì có thể sửa đổi chương trình của mình một cách tối thiểu nhất để có thể chạy trên điện thọai Nokia Hiện nay Sun đã đưa ra 2 dạng Configuration:

CLDC (Connected Limited Device Configuration-Cấu hình thiết bị kết nối giới hạn): được thiết kế để nhắm vào thị trường các thiết bị cấp thấp (low-end), các thiết bị này thông thường là máy điện thọai di động và PDA với khoảng 512 KB bộ nhớ Vì tài nguyên bộ nhớ hạn chế nên CLDC được gắn với Java không dây (Java Wireless ), dạng như cho phép người sử dụng mua và tải về các ứng dụng Java, ví dụ như là MIDlet

CDC- Connected Device Configuration (Cấu hình thiết bị kết nối): CDC được đưa ra nhắm đến các thiết bị có tính năng mạnh hơn dòng thiết bị thuộc CLDC nhưng vẫn yếu hơn các hệ thống máy để bàn sử dụng J2SE Những thiết bị này có nhiều bộ nhớ hơn (thông thường là trên 2MB) và có bộ xử lý mạnh hơn Các sản phẩm này có thể kể đến như các máy PDA cấp cao, điện thoại web, các thiết bị gia dụng trong gia đình …

Cả 2 dạng Cấu hình kể trên đều chứa máy ảo Java (Java Virtual Machine) và tập hợp các lớp (class) Java cơ bản để cung cấp một môi trường cho các ứng dụng J2ME Tuy nhiên, bạn chú ý rằng đối với các thiết bị cấp thấp, do hạn chế về tài

nguyên như bộ nhớ và bộ xử lý nên không thể yêu cầu máy ảo hổ trợ tất cả các tính năng như với máy ảo của J2SE, ví dụ, các thiết bị thuộc CLDC không có phần cứng

Trang 20

yêu cầu các phép tính toán dấu phẩy động, nên máy ảo thuộc CLDC không được yêu cầu hỗ trợ kiểu float và double

Trang 21

-Mobile Information Device Profile (MIDP): profile này sẽ bổ sung các tính năng như hỗ trợ kết nối, các thành phần hỗ trợ giao diện người dùng … vào CLDC Profile này được thiết kế chủ yếu để nhắm vào điện thọai di động với đặc tính là màn hình hiển thị hạn chế, dung lượng chứa có hạn Do đó MIDP sẽ cung cấp một giao diện người dùng đơn giản và các tính năng mạng đơn giản dựa trên HTTP Có thể nói MIDP là Profile nổi tiếng nhất bởi vì nó là kiến thức cơ bản cho lập trình Java trên các máy di động (Wireless Java)

-PDA Profile: tương tự MIDP, nhưng với thị trường là các máy PDA với màn hình và bộ nhớ lớn hơn

-Foundation Profile: cho phép mở rộng các tính năng của CDC với phần lớn các thư viện của bộ Core Java2 1.3 Ngoài ra còn có Personal Basis Profile, Personal

Profile, RMI Profile, Game Profile

Trang 22

Hình 4 So sánh Profile thông thường và Profile mở rộng

3.1.3 Máy ảo Java

Như chúng ta đã biết, một chương trình Java sẽ được biên dịch thành mã trung gian sau đó chính máy ảo Java sẽ biên dịch phần mã này sang mã máy để thực thi Máy ảo Java sẽ chịu trách nhiệm việc cung cấp tính năng bảo mật, cấp phát và thu hồi

bộ nhớ và quản lý điều phối các tiến trình Chúng ta có thể nói chính máy ảo làm cho chương trình của chúng ta “chạy”

Với CDC, máy ảo Java có cùng các đặc tính như J2SE.Tuy nhiên với CLDC, Sun đã phát triển riêng một dạng máy ảo chuyên biệt được gọi là K Virtual Machine gọi tắt là KVM Chính những hạn chế về tài nguyên của các thiết bị di động đã đề ra nhu cầu về sự ra đời của KVM.KVM không phải một máy ảo Java truyền thống: Máy ảo chỉ cần 40-80kb bộ nhớ

Chỉ đòi hỏi 20-40kb bộ nhớ động (heap)

Trang 23

Đến đây chúng ta có thể hình dung phần nào kiến trúc tổng thể của một chương trình J2ME như sau:

Hình 5 Cấu trúc chương trình J2ME

Nếu chương trình được biên dịch với CDC, chương trình sẽ chạy trên các máy ảo truyền thống và mang các đặc tính như chương trình J2SE

Nếu chương trình được biên dịch với CLDC, chương trình sẽ chạy với máy ảo chuyên biệt KVM và những đặc tính riêng do CLDC đòi hỏi

Trang 24

Với chương trình xây dựng bởi MIDP,chúng ta có cấu trúc chuyên biệt sau:

Hình 6 Cấu trúc chương trình MIDP

Tầng dưới cùng là hệ điều hành có hỗ trợ máy ảo KVM, bên trên là CLDC và trên cùng là MIDP Profile Lúc này khái niệm “Viết một lần, chạy bất cứ môi trường nào” của Sun không còn đúng hoàn toàn vì đã xuất hiện máy ảo chuyên biệt KVM Một số chương trình viết bằng MIDP sẽ không chạy được trên J2SE và ngược lại Tuy nhiên chúng ta phải cảm kích các nỗ lực của Sun đã giúp Java trở thành một ngôn ngữ

có khả năng độc lập với môi trường bên dưới nhất hiện nay, điều này đúng với cả thiết

Trang 25

Hình 7 Mô hình vòng đời của một MIDlet

Một chương trình MIDlet khi được nạp vào thiết bị có những trạng thái sau:

-Paused:Một chương trình MIDlet sẽ được đưa về trạng thái Paused sau khi thực hiện phương thức khởi tạo (constructor) và trước khi được chương trình quản lý ứng dụng (application manager) trên thiết bị gọi thực thi Trong quá trình hoạt động, chương trình MIDlet cũng có thể trở lại trạng thái Paused bởi thiết bị (khi trả lời cuộc gọi đến hoặc bởi chính chương trình MIDlet)

-Active:chương trình đang thực thi

-Destroyed:Chương trình MIDlet đã giải phóng tất cả tài nguyên và đã được tắt bởi trình quản lý trên ứng dụng trên thiết bị

Trang 26

3.2.2 Xây dựng một ứng dụng MIDlet

Chúng ta xây dựng một ứng dụng MIDlet bằng cách kế thừa (extends) lớp MIDlet Lớp này thực chất là 1 interface và chúng ta phải khai báo 3 hàm sau đây :startApp(), pauseApp(), và destroyApp() Dưới đây là 1 ví dụ về 1 chương trình MIDlet đơn giản:

public class midletTest extends MIDlet{

//phương thức khởi tạo(Constructor),không bắt buộc phải có

public midletTest() {…};

//được application manager gọi trước khi thực thi MIDlet

public void startApp() {…};

//được gọi trước khi tạm dừng Midlet

public void pauseApp() {….};

//được gọi trước khi kết thúc chương trình

public void destroyApp() {….};

Protected abstract void startApp() throws MIDletStateChangeException;

Protected abstract void pauseApp();

Protected abstract void destroyApp(boolean unconditional) throws

Trang 27

Hàm này được gọi khi có nhu cầu tắt MIDlet.Đây là nơi

giải phóng các tài nguyên đang dùng

abstract void

pauseApp() Hàm này được gọi để giải phóng tài nguyên

abstract void startApp() Được gọi khi MIDlet sắp đưa vào trạng thái thực

thi(active state) Final void

Trang 28

Hai quá trình quan trọng nhất của một ứng dụng MIDlet là quá trình nạp và quá trình thoát ứng dụng:

-Quá trình nạp:

User chọn kích hoạt ứng dụng MIDlet

Application manager khởi tạo các biến, gọi các phương thức khởi tạo

Ứng dụng MIDlet sau khi được nạp vào bộ nhớ sẽ được đưa vào trạng thái paused (Nhưng hàm pausedApp chưa được gọi)

Application manager gọi hàm startApp() Thực chất hàm startApp() sẽ được gọi mỗi khi ứng dụng được đưa vào trạng thái thực thi (active) Khi ta tạm ngưng ứng dụng và

có nhu cầu kích hoạt trở lại hàm này cũng được gọi trở lại

-Quá trình thoát:

User chọn thoát chương trình

Hàm destroyApp() được gọi, hàm này phải bảo đảm việc giải phóng tài nguyên

Hàm notifyDestroyed() được gọi để báo cho Application manager ứng dụng đã giải phóng hết tài nguyên và sẵn sàng bị tắt

3.2.4 Lớp MIDletStateChangeException

Khi tìm hiểu đến package javax.microedition.midlet, chúng ta còn phải quan tâm đến lớp MIDletStateChangeException.Ứng dụng MIDlet có hai hàm có khả năng tạo

ra (throw) Exception này là hàm destroyApp() và hàm startApp()

Như chúng ta đã biết trước khi ứng dụng được đưa vào trạng thái active thì hàm startApp() sẽ được gọi Nếu trong quá trình gọi hàm này phát sinh lỗi (thiết bị hết tài nguyên, tài nguyên cần dùng đang bị ứng dụng khác chiếm…)thì

MIDletStateChangeException sẽ được tạo ra

Trang 29

Trong quá trình thoát hàm destroyApp() cũng có thể phát sinh exception này, ví

dụ như khi chúng ta thoát mà chương trình đang nhận dữ liệu hết sức quan trọng từ network ta có thể phát sinh exception để dừng việc thoát

3.2.5 Lớp Display

Ứng dụng của chúng ta chắc chắn sẽ có nhu cầu xuất dữ liệu ra màn hình.Việc này trong ứng dụng MIDlet do một đối tượng thuộc lớp Display đảm nhiệm Lớp này nằm trong package javax.microedition.lcdui, package này chứa hầu như tất cả các lớp phục vụ cho việc phát triển giao diện của ứng dụng

Một số hàm quan trọng của lớp Display:

Static Display getDisplay(MIDlet m) Lấy đối trượng Display của MIDlet Displayable getCurrent() Lấy đối tượng Displayable hiện thời Void setCurrent(Alert alert,

Displayable nextDisplayable)

Void setCurrent(Displayable

nextDisplayable)

Tạo đối tượng alert

Boolean isColor() Cho biết thiết bị có hỗ trợ màu hay không Int numColors() Có bao nhiêu màu được hỗ trợ

Bảng 3 Một số hàm quan trọng của lớp Display

Mỗi MIDlet sẽ chỉ có một và chỉ một đối tương Display để điều khiển việc thể hiện dữ liệu Đối tượng Display không có phương thức khởi tạo mà được khởi tạo trực tiếp từ phương thức static của lớp

Ví dụ:

Display display = Display.getDisplay(this);

Trang 30

Tham số vào là một MIDlet, ở đây chúng ta gọi hàm từ lớp kế thừa từ MIDlet nên có thể truyền vào con trỏ this Thực ra công dụng chính của Display là cho phép hiển thị đối tượng nào lên màn hình hiện thời Các đối tượng có thể hiển thị lên màn hình là các đối tượng thuộc lớp Displayable ví dụ như form, Textbox, Canvas, Screen…

3.2.6 Lớp Displayable

Như đã đề cập, mỗi MIDlet sẽ chỉ có một đối tượng Display duy nhất và đối tượng Display dùng để thể hiện các đối tượng Displayable lên màn hình Như tên của lớp Displayable cho chúng ta thấy, đây là các đối tượng có khả năng hiển thị thông tin lên màn hình thiết bị Lớp Displayable bao gồm 2 lớp con là lớp Screen và lớp

Canvas Cụ thể chúng được định nghĩa như sau:

Abstract public class Displayable;

Public abstract class Canvas extends Displayable;

Public abstract class Screen extends Displayable;

- Tạo một đối tượng Displayable:

Thông thường chúng ta không trực tiếp tạo ra đối tượng thuộc lớp Displayable mà sử dụng lớp con của nó.Để viết các ứng dụng đồ họa ta thường kế thừa từ lớp Canvas

Public class Testgame extends Canvas{

Draw image, text, shapes…

}

Trang 31

removeCommand(Command

cmd)

Xóa bỏ một đối tượng Command vào đối tượng

Displayable Void setCommandListener(

CommandListener l)

Thêm CommandListener vào đối tượng

Displayable

Boolean isShown() Kiểm tra đối tượng Displayable có được thể hiện

trên thiết bị hay không

Bảng 4 Các hàm chính của Displayable

3.2.7 Lớp Command và CommandListener

Để nhận thông báo từ hệ điều hành về các sự kiện phát sinh lớp ứng dụng chính của chúng ta phải cài đặt (implement) các “listener” Trong J2ME hỗ trợ sẵn cho chúng ta 2 listener là CommandListener và ItemStateListener Lớp CommandListener

có hàm là commandListener() và tương ứng lớp ItemStateLisener có hàm là

itemStateListener(), đây là 2 hàm chúng ta cần cài đặt để nhận biết sự kiện xảy ra Trước khi đi sâu vào xử lý các sự kiện chúng ta sẽ tìm hiểu hai tác nhân chính phát sinh một sự kiện là Command và Item

Ta định nghĩa Command là một đối tượng giữ thông tin về một sự kiện(Event) Nói một cách đơn giản nhất thì command như một nút ấn(button) trên ứng dụng di động, khi ta chọn nút này thì sẽ phát sinh một sự kiện tương ứng

Trang 32

đề sẽ trở nên phức tạp hơn, có nhứng form số lượng command có thể nhiều hơn nút bấm chức năng trên thiết bị, lúc này các command sẽ được tổ chức theo dạng menu Trước tiên chúng ta tìm hiểu phải làm thêm một command vào ứng dụng:

Tạo một command để lưu thông tin về event

Thêm command này vào Form,TextBox, hay Alert….(các đối tượng displayable) Thêm một listener vào các Form hay TextBox ở trên

Khi phát hiện một event được kích hoạt, bộ listener sẽ gọi hàm

commandListener() và truyền thông tin về event làm thông số cho hàm

Khi khởi tạo một command ta cần 3 thông số, ví dụ:

Hình 9 Ví dụ về cách khởi tạo của hàm Command

Trang 33

- Label: Đoạn văn bản được xem như nhãn của Command

- Type: Thật thuận thiện nếu ta có thể ánh xạ một command với một nút trên thiết bị (ta gọi là soft-button).Giả sử ta có một command tên Help và ánh xạ được với HELP button trên thiết bị thì thật trực quan và dễ dàng cho người dùng

Thông số Type giúp chúng ta làm việc này Ta chọn Command.HELP Nếu thiết

bị không có nút help, thông số này không có nghĩa và command được đối xử như các command thông thường Tuy nhiên ta cần lưu ý khi đặt type là Command.HELP thì không có nghĩa là khi ta chọn command này các hướng dẫn sẽ được phát sinh mà ta cần phải làm việc này trong hàm commandAction() Thông số type chỉ giúp việc ánh

xạ các nút soft-button được dễ dàng

Các Type hỗ trợ:

BACK Dùng để đi ngược lại màn hình trước đó

CANCEL Dùng để hủy công việc đang thực hiện

ITEM

Dùng để ánh xạ một Command với một item trên màn hình.Giả sử khi ta dùng giao diện List,khi chọn một item ta có thể gắn item này

với một command để phát sinh một sự kiện nào đó

OK Xác nhận một yêu cầu nào đó hoặc thoát khỏi màn hình thông báo

SCREEN Thông thường thiết bị không có các nút soft-button tương ứng với

command dạng này.Việc thể hiện command tùy vào từng thiết bị STOP Dừng một công việc đang thực hiện

Bảng 5 Các TYPE hỗ trợ của lớp Command

Trang 34

- Prority :Độ ưu tiên, dùng để sắp xếp các command từ trên xuống dưới hay trái sang phải khi được thể hiện chung dạng menu Giá trị này càng cao thì độ ưu tiên càng thấp

Sau đây là hàm chính của lớp Command và CommandListener ( hai lớp này nằm trong package javax.microedition.lcdui)

int getLabel() Cho biết label của Command

int getPrority() Cho biết độ ưu tiên

javax.microedition.lcdui.CommandListener void commandAction(Command

và mỗi dạng đều có thể phát sinh các sự kiện.Items chỉ có thể được sử dụng như một thành phần của form, khác với Commands có thể được sử dụng trong Form, TextBox, List và Canvas

Khi chúng ta thêm một Item vào Form, để xử lý các sự kiện phát sinh ta phải cài đặt một Listener (ở đây là ItemStateListener) Khi có một thay đổi trên Item (ví dụ

Trang 35

tượng listener sẽ được thông báo có một sự kiện phát sinh cùng các thông tin về sự kiện này Sự kiện này sẽ kích hoạt hàm itemStateChanged() được chúng ta cài đặt

Hiện tại MIDP hỗ trợ các loại Item sau:

ChoiceGroup, DateField, Gauge, ImageItem, StringItem, và TextField Ở đây có một ngoại lệ là hai loại StringItem và ImageItem không hỗ trợ phát sinh sự kiện mặc dù chúng là lớp con của lớp Item Chúng ta cài đặt một listener trong lớp Form, khi một item phát sinh sẽ kích hoạt hàm itemStateChanged(), tuy nhiên không phải khi chúng

ta thay đổi giá trị nhiều items cùng lúc thì sẽ gọi đầy đủ bấy nhiêu lần Ở đây có một luật được đề ra:

Nếu một Item bị thay đổi, hàm itemStateChanged() phải được gọi đối với Item này trước khi những thay đổi trên những Item sau đó được nhận biết

Nếu chính bản thân MIDlet thay đổi giá trị một Item(giả sử chúng ta dùng mã lệnh để thay đổi chứ không phải do người dùng), hàm itemStateChanged() không được gọi

Nếu thiết bị nhận biết được người dùng chuyển từ Item này sang Item khác (chuyển focus) thì hàm itemStateChanged() phải được gọi trước khi chuyển sang Item

kế tiếp

Sau đây là các hàm quan trọng khi sử dụng Item:

Javax.microedition.lcdui.Item

String getLabel() Lấy nhãn của Item

void setLabel(String label) Đặt nhãn của label

javax.microedition.lcdui.ItemStateListener void itemStateChanged(Item item) Được gọi khi giá trị của item thay đổi

Bảng 7 Các hàm quan trọng của lớp Item

Ngày đăng: 13/07/2014, 17:34

HÌNH ẢNH LIÊN QUAN

Hình 2. Các thành phần của J2ME - lập trình ứng dụng trên thiết bị di động
Hình 2. Các thành phần của J2ME (Trang 18)
Hình 3. Configurations và các thiết bị - lập trình ứng dụng trên thiết bị di động
Hình 3. Configurations và các thiết bị (Trang 20)
Hình 4. So sánh Profile thông thường và Profile mở rộng - lập trình ứng dụng trên thiết bị di động
Hình 4. So sánh Profile thông thường và Profile mở rộng (Trang 22)
Hình 7. Mô hình vòng đời của một MIDlet - lập trình ứng dụng trên thiết bị di động
Hình 7. Mô hình vòng đời của một MIDlet (Trang 25)
Hình 10. Sơ đồ các lớp giao diện của J2ME - lập trình ứng dụng trên thiết bị di động
Hình 10. Sơ đồ các lớp giao diện của J2ME (Trang 37)
Hình 15. Màn hình khi bắt đầu cài đặt WTK 2.5 - lập trình ứng dụng trên thiết bị di động
Hình 15. Màn hình khi bắt đầu cài đặt WTK 2.5 (Trang 55)
Hình 19. Quá trình cài đặt WTK 2.5 kết thúc - lập trình ứng dụng trên thiết bị di động
Hình 19. Quá trình cài đặt WTK 2.5 kết thúc (Trang 57)
Hình 23. Cửa sổ cấu hình cho MIDlet - lập trình ứng dụng trên thiết bị di động
Hình 23. Cửa sổ cấu hình cho MIDlet (Trang 59)
Hình 26. Giao diện Menu chính của chương trình - lập trình ứng dụng trên thiết bị di động
Hình 26. Giao diện Menu chính của chương trình (Trang 61)
Hình 27. Giao diện Xem Album - lập trình ứng dụng trên thiết bị di động
Hình 27. Giao diện Xem Album (Trang 62)
Hình 28. Giao diện Xem Slide - lập trình ứng dụng trên thiết bị di động
Hình 28. Giao diện Xem Slide (Trang 63)
Hình 29. Giao diện Trợ giúp - lập trình ứng dụng trên thiết bị di động
Hình 29. Giao diện Trợ giúp (Trang 64)
Hình 30. Giao diện Liên hệ - lập trình ứng dụng trên thiết bị di động
Hình 30. Giao diện Liên hệ (Trang 65)
Hình 31. Giao diện Download - lập trình ứng dụng trên thiết bị di động
Hình 31. Giao diện Download (Trang 66)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w