Tải bản đầy đủ (.pdf) (309 trang)

Bài giảng lập trình cho thiết bị di Động it18 Đại học mở hà nội

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (11.42 MB, 309 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<b>BÀI 1: GIỚI THIỆU VỀ LẬP TRÌNH </b>

<i><b>Mục tiêu: </b></i>

Trong bài này, Anh/Chị cần đạt được những mục tiêu sau:

1. Cung cấp các vấn đề tổng quan về công nghệ di động và ứng dụng. Đặc biệt là công nghệ điện thoại di động.

2. Giới thiệu một số công nghệ lập trình ứng dụng trên điện thoại di động.

<i><b>Nội dung: </b></i>

<b>1.1. Công nghệ mobile và ứng dụng </b>

<b>1.1.1. Lịch sử phát triển công nghệ mobile </b>

Ngày nay, với sự phát triển mạnh mẽ của công nghệ sản xuất phần cứng đã cho ra đời rất nhiều loại thiết bị tính tốn trợ giúp con người trong mọi lĩnh vực cuộc sống. Các thiết bị đó ngày càng thông minh, mềm dẻo và linh hoạt hơn nhờ được chương trình hóa các q trình điều khiển thơng qua việc lập trình. Chúng ta có thể thấy việc ứng dụng lập trình trên các thiết bị rất đa dạng, đi từ các thiết bị thơng dụng dùng trong gia đình như lị vi sóng, t ủ lạnh, nồi cơm điện... cho đến các thiết bị tối tân như các rô-bốt thám hiểm sao hỏa. Trong đó, phải kể đến các điện thoại di động là loại thiết bị có tốc độ phát triển chóng mặt.

Trong nh ững năm c uố i thế k ỷ 20 và đ ầu t hế kỷ 21, nhiều dò ng s ản ph ẩm điện t ho ại di đ ộng c ủa nhiều hãng đã đ ược ra đ ời . Có t hể kể đến như hãng No kia, Motorola, So ny, Sams ung, Apple, RIM , LG, Google... đây là sự bùng nổ về t hị trường c ủa điện t ho ại di động, và đ ặc biệt hiệ n nay l à điện t hoại thơ ng minh (smartphone). Đi ều này có được là nhờ s ự tiện ích và kh ả năng trợ gi úp con người trong cơng việc, giải trí c ủa điện tho ại di đ ộng là rất lớn.

Sau đây là hình vẽ cho thấy sự phát triển về số lượng của điện thoại qua các năm.

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

Trong đó: Subscriber Number là số thiết bị điện thoại được đăng ký theo đơn vị triệu chiếc (million), Net increase là sự gia tăng của mạng và Penetration Rate là tỷ lệ thâm nhập thị trường.

Cho đến nay, có thể chia làm ba giai đoạn phát triển của điện thoại di động tương ứng 3 thế hệ như sau :

 Thế hệ thứ nhất (1st generation): là các điện thoại di động chỉ đơn giản để nghe, gọi và nhắn tin. Thế hệ này bị hạn chế rất lớn về các khả năng đáp ứng, chỉ dùng với mạng tín hiệu tương tự và chưa có được sự "thông minh" theo một nghĩa nào đó. Thế hệ này là của những năm 1990.

 Thế hệ thứ hai (2nd generation): là các điện thoại di động có thêm một vài tính năng đa phương tiện như chụp ảnh, nghe nhạc và có thể dùng với mạng tín hiệu số. Đây là thế hệ của những năm sau 2000.

 Thế hệ thứ ba (3rd generation): là dòng điện thoại di động thông minh hiện nay, đáp ứng được các khả năng tính tốn và ứng dụng như một máy tính, kết nối mạng internet và sử dụng được với mạng tốc độ cao.

Sau đây là hình ảnh của một số điện thoại di động theo từng giai đoạn phát triển.

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

Hiện nay, xu thế của điện tho ại thông minh đang chiếm thị phần lớn với các đặc điểm có thể gồm:

<b>1.1.2. Tiềm năng ứng dụng cơng nghệ mobile </b>

Có thể thấy điện thoại thông minh hiện đang tiệm cận đến khả năng tính tốn và xử lý của máy tính, bên c ạnh đó là mơi trường điện tốn đám mây được phát triển tạo cơ hội cho sự lớn mạnh về ứng dụng của điện thoại thông minh. Cùng với

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

sự phát triển của thiết bị phần cứng, khả năng đáp ứng cho người dùng c ủa các sản phẩm phần mềm cũng ngày càng đa dạng. Hiện nay, trên thị trường ứng dụng phần mềm có rất nhiều sản phẩm ở nhiều lĩnh vực khác nhau, từ giải trí cho đến chăm sóc sức khỏe, giám sát và điều khiển từ xa các thiết bị ...

Ở thế hệ đầu, công nghệ di động (mobile technology) được phát triển với 4 mục đích chính đó là:

 Kết nối mọi người (connecting people),  Chia sẽ thông tin (information sharing),  Truy cập mạng (internet access),

 Giải trí (entertainment).

Đến nay, đặc biệt đối với thế hệ di động thứ 3 (smartphone), khả năng đáp ứng cho người dùng rất lớn nên phạm vi ứng dụng được mở rộng, trợ giúp con người trong nhiều công việc ở nhiều lĩnh vực của đời sống. Có thể liệt kê một số lĩnh vực ứng dụng của smartphone :

 Giải trí: trò chơi, nghe nhạc, xem phim,...

 Y tế: hướng dẫn chăm sóc sức khỏe, hỗ trợ theo dõi bệnh lý, kiểm soát phác đồ điều trị, hỗ trợ thăm khám bước đầu,...

 Giáo dục: theo dõi hoạt động của trẻ em, hỗ trợ học tập và đào tạo, tạo kết nối - tương tác giữa nhà trường, gia đình, xã hội...

 Giao thông: phát hiện các phương tiện đề phòng va chạm, theo dõi & kiểm sốt lưu thơng, hỗ trợ theo dõi và ghi nhận hành trình...

 Và rất nhiều lĩnh vực khác, hứa hẹn là điện thoại di động thông minh ngày càng giúp con người tăng hiệu quả công việc, năng suất lao động thúc đẩy sự phát triển của xã hội.

Hiện nay, chúng ta thấy năng lực tính tốn c ủa các điện tho ại thông minh được tăng cường rất mạnh có thể nói gần như tiệm cận đến các máy tính. Bên cạnh đó, hệ thống hạ tầng mạng cùng với dịch vụ điện toán đám mây ngày càng phát triển, các thiết bị di động sẽ được tích hợp để khai thác những dịch vụ này nhằm đưa đến cho người dùng các ứng dụng lớn, đòi hỏi khả năng lưu trữ dữ liệu và tính tốn lớn. Như vậy, phạm vi ứng dụng của các điện thoại thông minh một lần nữa được nhân rộng ra lớn hơn nhiều.

Để thực hiện những mục đích trên chúng ta có thể minh họa sự kết nối, chia sẽ thông tin trên mạng internet qua sơ đồ sau:

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

Các công nghệ mạng kết nối và chia sẽ thông tin trên các thiết bị di động hiện nay có thể liệt kê như sau:

 GSM, GPRS, EDGE,

 1G, 2G, 2.5G, 2.75G, 3G và 4G,  IEEE802.11,

 InfraRed và Bluetooth,...

Công nghệ GSM (Global System for Mobile Communication) là một trong những hệ thống truyền dẫn số theo vùng. EDGE cũng tương t ự như công nghệ GSM nhưng được tăng cường về tốc độ truyền tải dữ liệu. GPRS (General Packet Radio Service) là một chuẩn trao đổi dữ liệu cho các thi ết bị không dây với tốc độ vừa phải.

Hiện nay các mạng tốc độ cao sử dụng thế hệ 3G và 4G được phát triển từ các thế hệ trước đó (1G, 2G, 2.5 G và 2.75G). Có hai phiên bản của thế hệ 3G, UMTS được sử dụng chủ yếu ở Châu Âu, còn phiên bản CDMA-2000 được phát triển ở Bắc Mỹ và một số vùng Châu Á. Thế hệ này đạt tốc độ cho phép hội nghị truyền hình, xem tivi,... Thế hệ 4G là sự kết hợp các công nghệ mạng không dây dựa trên 3G song đạt được tốc độ cao hơn nhiều lần.

IEEE802.11 là một chuẩn cho kết nối mạng c ục bộ khơng dây, có các phiên bản 802.11a, 802.11b và 802.11g, đ ạt tốc độ truyền dữ liệu 54Mbps. Công nghệ này được sử dụng cho các thiết bị cá nhân c ầm tay (PDA), máy tính xác tay (Notebook) ho ặc thậm chí các máy tính đ ể bàn (PC) và đi ện tho ại thông minh kết nối được với nhau.

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

InfraRed là một công nghệ cho phép trao đổi dữ liệu qua cổng hồng ngoại, với khoảng cách gần, thường sử dụng cho các thiết bị điều khiển từ xa, tốc độ dữ liệu khoảng 10 Kbps, địi hỏi khơng có vật cản giữa hai thiết bị khi thực hiện kết nối.

Bluetooth là công nghệ chủ yếu được sử dụng cho các tai nghe không dây, điện thoại di động,... Khoảng cách cho phép tối đa giữa hai thiết bị kết nối là 10 mét, tốc độ dữ liệu khoảng 1Mbps.

Hình vẽ sau cho thấy khả năng kết nối người dùng của điện thoại di động dựa trên các công nghệ.

Bên cạnh sự phát triển của hạ tầng phần cứng và công nghệ mạng để kết nối và truyền tải dữ liệu, việc phát triển các ứng dụng thực tiễn cho các thiết bị di động ngày càng đòi hỏi cấp thiết, đáp ứng nhu cầu cao hơn của xã hội. Các công nghệ phần mềm được phát triển song song với công nghệ phần cứng để thực hiện điều này. Hiện nay có một số cơng nghệ phát triển phần mềm ứng dụng trên điện thoại di động như: Windows Mobile, Symbian, Embedded Visual C++ và .Net, J2ME, Android, iOS, RIM... và chúng ta sẽ đề cập chi tiết ở phần tiếp theo.

<b>1.2. Công nghệ cho lập trình trên mobile </b>

Sau đây chúng ta sẽ xem xét một số nền tảng cho phát triển ứng dụng di động, đặc biệt là các nền tảng hiện đại.

<b>1.2.1. Nền tảng Symbian </b>

Symbian là hệ điều hành điện thoại di động được thiết kế cho điện tho ại thông minh được phát triển bởi Symbian Ltd nhưng hiện đang được duy trì bởi Accenture. Các nền tảng Symbian là sự kế thừa cho hệ điều hành Symbian và các thế hệ Nokia. Điện tho ại Symbian đ ầu tiên trên màn hình c ảm ứng là Ericsson R380

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

điện thoại thông minh đã được phát hành vào năm 2000 và là thiết bị đầu tiên được bán trên thị trường như là một "điện thoại thơng minh". Nó kết hợp một PDA với một điện thoại di động.

Trong giữa những năm của thập niên đ ầu của thế kỷ 21, các điện tho ại di động với nền tảng hệ điều hành Symbian phát triển mạnh mẽ, trong đó hãng Nokia chiếm thị phần rất lớn. Từ các dòng điện tho ại di đ ộng có máy ảnh đến có Wi-Fi, rồi tích hợp các tính năng đa phương ti ện khác như GPS, camera độ phân giải cao và tự động lấy nét cũng như đèn flash LED, kết nối 3G và Wi-Fi miễn phí và TV-out.

Hình vẽ sau thể hiện các thành phần trong kiến trúc nền tảng của Symbian.

 Kernel: là nhân của hệ điều hành Symbian.

 Symbian System Layer: là tầng hệ thống, chiếm phần lớn nhất để quản lý, điều hành hệ thống.

 Symbian Application Engines: là tầng quản lý ứng dụng.

 UI Design: tầng dùng cho thiết kế giao diện người dùng đồ họa.

<b>1.2.2. Nền tảng Window </b>

Microsoft Windows CE (bây giờ chính thức được gọi là Windows Embedded Compact và trước đây còn được gọi là Windows Embedded CE, và đôi khi viết tắt WinCE) là một hệ điều hành được phát triển bởi Microsoft cho các hệ thống nhúng. Windows CE là một hệ điều hành riêng biệt và ở dạng lõi, chứ không phải là một phiên bản cắt giảm từ máy tính để bàn Windows.

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

Microsoft cấp phép cho Windows CE cho các OEM và các nhà sản xuất thiết bị. Các OEM và các nhà s ản xuất thiết bị có thể thay đổi và tạo ra giao diện người dùng của riêng mình theo kinh nghiệm, với Windows CE cung cấp các nền tảng kỹ thuật để làm như vậy.

Hình vẽ sau thể hiện các thành phần trong kiến trúc của Window Phone.

<b>1.2.3. Nền tảng Palm </b>

Palm OS (còn được gọi là Garnet OS) là một hệ điều hành điện thoại di động đầu tiên được phát triển bởi Palm, Inc, cho thiết bị hỗ trợ cá nhân (PDA) vào năm 1996. Palm OS được thiết kế để dễ sử dụng với người dùng đồ họa dựa trên giao diện màn hình cảm ứng. Nó được cung cấp với một bộ các ứng dụng cơ bản cho việc quản lý thông tin cá nhân.

Hệ điều hành này đã được mở rộng để hỗ trợ điện tho ại thông minh. Một số được cấp phép khác đã sản xuất các thiết bị được hỗ trợ bởi hệ điều hành Palm. Đến nay, Palm OS đã được thực hiện trên một loạt các thiết bị di động, bao gồm cả điện thoại thông minh, đồng hồ đeo tay, chơi game cầm tay, bàn giao tiếp, đọc mã vạch và các thiết bị GPS.

Các tính năng chính của nền tảng Palm OS Garnet là:

Môi trường đơn giản và đơn nhiệm, cho phép chạy các ứng dụng tồn màn hình với giao diện người dùng cơ bản, thông dụng.

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

 Màn hình đơn sắc hoặc màu với độ phân giải thấp.

 Hệ thống đầu vào nhận dạng chữ viết tay được gọi là Graffiti 2.  Công nghệ HotSync để đồng bộ hóa dữ liệu với máy tính để bàn.  Khả năng ghi âm và phát lại âm thanh.

 Mô hình bảo mật đơn giản: thiết bị có thể bị khóa bằng mật khẩu, hồ sơ ứng dụng tùy ý có thể được thực hiện riêng tư.

 Truy cập mạng theo chuẩn TCP / IP.

 Cổng nối tiếp / USB, hồng ngoại, Bluetooth và kết nối Wi-Fi.  Mở rộng hỗ trợ thẻ nhớ.

 Đã được định nghĩa chuẩn định dạng dữ liệu cho các ứng dụng quản lý thông tin cá nhân để lưu trữ lịch, địa chỉ, cơng việc và các mục lưu ý, có thể truy cập bởi các ứng dụng của bên thứ ba.

 Đi kèm hệ điều hành Palm là một bộ các ứng dụng tiêu chuẩn.

Sau đây là hình vẽ thể hiện kiến trúc các thành phần trong nền tảng Palm OS.

<b>1.2.4. Nền tảng BlackBerry </b>

BlackBerry là một dòng thiết bị điện thoại phát triển và thiết kế bởi Research In Motion (RIM). Hệ điều hành chạy trên dòng thiết bị này cũng được phát triển bởi

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

BlackBerry, gọi là BlackBerry OS. Điện tho ại thông minh BlackBerry đ ầu tiên được phát hành vào năm 1999, được thiết kế để hoạt động như thiết bị hỗ trợ cá nhân, máy nghe nhạc di động, trình duyệt internet, thi ết bị chơi game, máy ảnh và nhiều hơn nữa. Chúng chủ yếu được biết đến với khả năng c ủa họ để gửi và nhận được email và tin nhắn tức thời trong khi duy trì một mức độ cao về bảo mật thơng qua mã hóa tin nhắn trên thiết bị. Thiết bị BlackBerry hỗ trợ một lượng lớn các tính năng nhắn tin tức thời, với việc dịch vụ Messenger BlackBerry đ ộc quyền phổ biến nhất.

<b>1.2.5. Nền tảng Bada </b>

Bada là một hệ điều hành cho các thiết bị di động như điện thoại thơng minh và máy tính bảng. Nó được phát triển bởi Samsung Electronics. Tên c ủa nó có nguồn gốc từ bada, có nghĩa là "đại dương" ho ặc "biển" trong tiếng Hàn. Nó được sử dụng trong dòng điện thoại từ tầm trung đến điện thoại thông minh cao cấp.

Bada, như Samsung đã đ ịnh nghĩa nó, không phải là một hệ điều hành riêng c ủa mình, nhưng một nền tảng với một kiến trúc hạt nhân có thể cấu hình được. Đó là một hệ thống lõi lai giữa hệ điều hành thời gian thực có bản quyền và nhân c ủa Linux.

Kiến trúc bada bao gồm bốn lớp sau đây:

 Kernel: là lớp hạt nhân, lớp này có chứa một trong hai hệ điều hành thời gian thực hoặc hạt nhân Linux, tùy thuộc vào cấu hình phần cứng thiết bị.

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

 Device: là lớp thiết bị, lớp này chứa các chức năng cốt lõi c ủa các nền tảng thiết bị di đ ộng được cung c ấp bởi hệ thống thiết bị điều hành, đồ họ a và chức năng đa phương tiện, và các thành phần thông tin liên l ạc. Các chức năng này bao gồm như điện tho ại, an ninh, đ ồ họa, và sự kiện và quản lý cửa sổ.

 Service: là lớp dịch vụ, lớp này chứa các chức năng định hướng dịch vụ được cung cấp bởi các ứng dụng lõi và các thành phần hỗ trợ. Ứng dụng lõi được cung c ấp bởi lớp dịch vụ bao gồm ứng dụng danh bạ và nhắn tin. Để truy cập vào các tính năng này có thể thơng qua các API (giao diện lập trình ứng dụng) trên lớp khung.

 Framework : là lớp khung, lớp này có C++ và các nền tảng web của bada. Thành phần C++ bao gồm các nền tảng cho ứng dụng, cũng như các giao diện và các lớp đối tượng cung cấp quyền truy cập vào các chức năng trên các lớp phía dưới. Khung ứng dụng cung c ấp các tính năng cho ứng dụng quản lý vòng đời, xử lý sự kiện, và điều khiển ứng dụng. Các giao diện được cung c ấp bởi API mở bao gồm một số giao diện cơ bản cần thiết của tất cả các ứng dụng để xử lý các loại dữ liệu, tiện ích, tính năng thiết bị cơ bản, và các trạng thái ứng dụng, và để tạo ra các giao diện người dùng. Thành phần nền web cung cấp các chuẩn đã được thiết lập và các tính năng, chẳng hạn như HTML, CSS và JavaScript, cũng như các API dựa trên JavaScript cho điều khiển giao diện và các sự kiện.

Trong kiến trúc của Bada, tầng thiết bị cung cấp các chức năng cốt lõi như đồ họa, các giao thức, điện thoại, an ninh.

Các tầng dịch vụ cung cấp thêm nhiều tính năng dịch vụ trung tâm như tin nhắn SMS, lập bản đồ... Để cung cấp các tính năng dưới dạng như một bada Server. Tầng trên cùng cung cấp một giao diện lập trình ứng dụng (API) trong C++ cho các nhà phát triển ứng dụng sử dụng. Bada cung c ấp nhiều điều khiển giao diện khác nhau cho nhà phát triển: Nó cung c ấp các loại giao diện người dùng cơ bản điều khiển như Listbox, chọn màu và Tab, có một điều khiển trình duyệt web dựa trên mã nguồn mở WebKit, và các tính năng Adobe Flash. Cả WebKit và Flash có thể được nhúng vào bên trong các ứng dụng Bada. Bada hỗ trợ thư viện đồ họa 3D OpenGL ES 2.0 và cung cấp đặc tính bản đồ tương tác với các điểm quan tâm (POI) trên bản đồ, và nó cũng có thể được nhúng vào bên trong các ứng dụng bên thứ 3. Nó cũng hỗ trợ tính năng co giúm để thu phóng, duyệt web theo từng thẻ và cắt, sao chép, và dán.

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

Bada hỗ trợ nhiều cơ chế để tăng cường sự tương tác, có thể được tích hợp vào các ứng dụng. Chúng bao gồm các cảm biến khác nhau như cảm biến chuyển động, kiểm sốt độ rung, nhận diện khn mặt, gia tốc, từ kế, độ nghiêng, hệ thố ng định vị toàn cầu (GPS), và cảm ứng đa điểm.

Ứng dụng được phát triển trong C++ với Bada SDK và dựa trên môi trường phát triển tích hợp (IDE) là Eclipse. Chuỗi cơng cụ dựa trên GNU được sử dụng để xây dựng và gỡ lỗi các ứng dụng. IDE cũng có giao diện Builder, mà các nhà phát triển có thể dễ dàng thiết kế giao diện của ứng dụng của họ bằng cách kéo và thả giao diện điều khiển vào màn hình. Để kiểm tra và s ửa lỗi, IDE có chứa một mơi trường giả lập để chạy thử các ứng dụng.

<b>1.2.6. Nền tảng IOS </b>

iOS (hệ điều hành iPhone trước đây) là một hệ điều hành di động phát triển và phân phối bởi Apple Inc. Lần đầu được phát hành vào năm 2007 cho iPhone và iPod Touch, nó đã được mở rộng để hỗ trợ các thiết bị khác của Apple như iPad và Apple TV. Không giống như Microsoft Windows CE (Windows Phone) và Android của Google, Apple không cung c ấp giấy phép cho iOS để cài đặt trên phần cứng không phải của Apple. Kho ứng dụng AppStore của Apple có lượng ứng dụng và người dùng rất lớn (chẳng hạn, năm 2012 đã có hơn 700.000 ứng dụng iOS với số lượt được tải về hơn 30 tỷ lần).

Giao diện người dùng của iOS dựa trên khái niệm về thao tác trực tiếp, sử dụng các cử chỉ cảm ứng đa điểm. Yếu tố kiểm sốt giao diện bao gồm thanh trượt, cơng tắc, và các nút. Đáp ứng cho người sử dụng đ ầu vào là ngay lập tức và cung cấp một giao diện lỏng. Tương tác với các hệ điều hành bao gồm các cử chỉ chẳng hạn như kéo mạnh, vuốt, chạm, tất cả đều có định nghĩa c ụ thể trong bối cảnh của hệ điều hành iOS và giao diện cảm ứng đa điểm của nó. Cảm biến gia tốc được sử dụng bởi một số ứng dụng để đáp ứng lắc thiết bị (một lệnh hay dùng là lệnh undo) hoặc xoay nó theo ba hướng (một lệnh hay dùng là chuyển đổi màn hình từ chế độ dọc sang chế độ ngang).

iOS có nguồn gốc từ OS X, nó được chia sẻ từ nền tảng Darwin, và do đó là một hệ điều hành Unix. iOS là phiên bản di động c ủa Apple OS X, một hệ điều hành được sử dụng trên máy tính của Apple.Trong iOS, có bốn tầng trừu tượng như hình vẽ bên dưới: tầng nhân hệ điều hành (Core OS), t ầng dịch vụ lõi (Core Services), tầng đa phương tiện và dịch vụ ứng dụng (Media), tầng giao diện người dùng (Cocoa Touch).

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

<b>1.2.7. Nền tảng Java ME </b>

Java MicroEdition (ME) là một bộ phận chuyên biệt của nền tảng Java nhằm cung c ấp một tập các Java API để phát triển ứng dụng cho các thiết bị nhỏ và cấu hình thấp. Do đó nó có thể bao gồm nhiều thiết bị với các công nghệ phần cứng khác nhau. Java ME được chia thành các thành phần gồm cấu hình (configurations) và hồ sơ (profiles), nhằm xác định một số phần nhất định của Java API phù hợp được để chạy trên một thiết bị cụ thể. Các điện thoại di động phải thể hiện CLDC (Connected Limited Device Configuration) cùng với MIDP (Mobile Information Device Profile), cả hai chúng định nghĩa API để các lập trình viên có thể sử dụng để xây dựng các ứng dụng di động.

Tuy nhiên, cả CLDC và MIDP đều tồn tại với các phiên bản khác nhau để phù hợp cho các điện thoại di động khác nhau. Chẳng hạn, hiện tại, Nokia N95 thực hiện phiên bản mới nhất của CLDC là 1.1 và MIDP là 2.0. Điều quan trọng là một phiên bản thứ 3 mới của MIDP hiện đang được phát triển. Máy ảo Java (Java Virtual Machine) cho các thiết bị di động đã được viết lại và nó khơng cịn là bộ nhớ nhỏ hơn nhiều so với máy tính như trước đây mà đã được tối ưu đ ặc biệt cho các thiết bị nhỏ như điện thoại di động.

Nền tảng phát triển ứng dụng này (Java ME) có thể được dùng để phát triển ứng dụng chạy trên nhiều hệ điều hành khác nhau với các kiến trúc cấu hình phần cứng khác nhau. Do vậy đã được nhiều nhà phát triển sử dụng để xây dựng các ứng dụng trên điện thoại di động.

Sau đây là hình vẽ minh họa kiến trúc các thành phần cơ bản trong nền tảng Java ME.

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

<b>1.2.8. Nền tảng Android </b>

Android là một hệ điều hành dựa trên Linux được thiết kế chủ yếu cho màn hình cảm ứng thiết bị di động như điện thoại thông minh và máy tính bảng, được phát triển bởi Google cùng với Open Handset Alliance. Ban đầu được phát triển bởi Android Inc, mà Google hỗ trợ về tài chính và sau đó mua lại vào năm 2005. Android đã được công bố trong năm 2007 cùng với sự thành lập của Open Handset Alliance, một tổ hợp 86 phần cứng, phần mềm và các công ty viễn thông dành cho việc thúc đẩy các tiêu chuẩn mở cho các thiết bị di động.

Google phát hành mã Android là mã nguồn mở, dưới giấy phép Apache. Dự án Android Open Source (AOSP), dẫn đ ầu bởi Google, được giao nhiệm vụ duy trì và phát triển hơn nữa của Android. Ngồi ra, Android có một cộng đồng lớn của các nhà phát triển viết các ứng dụng mở rộng chức năng c ủa thiết bị. Các nhà phát triển viết chủ yếu trong một phiên bản tùy biến của Java. Các ứng dụng có thể được tải về từ cửa hàng trực tuyến như Google Play (trước đây là Android Market), các cửa hàng ứng dụng do Google, hoặc các trang web của bên thứ ba. Kho ứng dụng trên nền tảng Android phát triển rất mạnh mẽ, số lượng và chất lượng ứng dụng ngày càng tăng, số lượng các nhà viết ứng dụng trên nền tảng ngày càng đông. Chẳng hạn đến tháng tám năm 2012, đã có hơn 600.000 ứng dụng có sẵn cho Android, và số lượng ước tính của các ứng dụng tải về từ Google Play là 20 tỷ.

Điện thoại đầu tiên hỗ trợ Android được bán ra trong tháng 10 năm 2008, và đến cuối năm 2010, Android đã trở thành nền tảng điện thoại thơng minh hàng đầu thế giới. Nó có một thị phần điện thoại thơng minh trên tồn thế giới là 59% vào đầu năm 2012.

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">

Kiến trúc Android gồm các thành phần chính được thể hiện trong hình vẽ dưới đây.

(1) Linux Kernel: là các dịch vụ lõi (bao gồm trình điều khiển phần cứng, xử lý và quản lý bộ nhớ, bảo mật, mạng và quản lý nguồn năng lượng) được thể hiện bởi hạt nhân của Linux 2.6. Hạt nhân c ủa Linux cũng cung cấp một tầng trừu tượng giữa phần cứng và các phần còn lại.

(2) Libraries: là hệ thống thư viện nằm ngay phía trên đầu của hạt nhân, bao gồm nhiều thư viện lõi khác nhau của C/C++ như là "libc" và "SSL", cũng như:

- Một thư viện đa phương tiện để phát âm thanh và trình chiếu phim. - Một bộ quản lý giao diện để cung cấp quản lý hiển thị trên màn hình. - Thư viện đồ họa bao gồm SGL và OpenGL cho đồ họa 2D và 3D. - SQLite cho việc hỗ trợ quản trị cơ sở dữ liệu cục bộ.

- SSL và WebKit cho việc tích hợp trình duyệt web và bảo mật Internet.

(3) Android Run Time: là môi trường chạy Android, điều làm cho một điện thoại Android đúng thực sự là chính nó chứ khơng phải là một điện thoại di động của Linux. Nó bao gồm các thư viện lõi và máy ảo Dalvik, môi trường chạy Android là

</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">

bộ máy nhằm tăng cường sức mạnh cho các ứng dụng, cùng với các thư viện để làm cơ sở cho các khung ứng dụng. Trong đó,

- Core libraries: là thư viện lõi. Trong khi phát triển ứng dụng Android được thực hiện đúng như trong Java thì máy ảo Dalvik không phải là một máy ảo Java. Thư viện lõi Android cung cấp hầu hết các tính năng có sẵn trong các thư viện lõi Java cũng như các thư viện chuyên biệt của Android.

- Dalvik Virtual Machine: là máy ảo Dalvik. Dalvik là một máy ảo được đăng ký làm cơ sở nhằm tối ưu hóa để đảm bảo rằng một thiết bị có thể chạy nhiều thể hiện của nó hiệu quả. Nó dựa trên nhân của Linux cho việc quản lý bộ nhớ ở mức thấp và quản lý luồng.

(4) Application Framework: là khung ứng dụng. Khung ứng dụng cung cấp các lớp đối tượng để tạo ra các ứng dụng Android. Nó cũng cung cấp các lớp trừu tượng (generic abstraction) để truy cập phần cứng và quản lý giao diện người dùng và tài nguyên ứng dụng.

(5) Application Layer: là t ầng ứng dụng. Tất cả các ứng dụng, gồm cả ứng dụng nội bộ (Native Apps) và ứng dụng bên thứ ba (Third Party Apps), được xây dựng trên tầng ứng dụng bằng cách sử dụng chung thư viện API. Tầng ứng dụng thực thi bên trong môi trường Android và sử dụng các lớp đối tượng và các dịch vụ được cung

<b>cấp từ khung ứng dụng. </b>

<b>1.3. Cơng nghệ J2ME và cách lập trình </b>

<b>1.3.1. Giới thiệu về công nghệ J2ME </b>

<i><b>1.3.1.1. Giới thiệu J2ME của ngơn ngữ lập trình Java </b></i>

Ngơn ngữ lập trình Java bước đầu được phát triển để xây dựng các ứng dụng ở máy đầu cuối (máy khách), sau đó được mở rộng và phát triển để xây dựng các ứng dụng máy chủ. Hiện nay nó có ba phiên bản chính đó là J2SE, J2EE và J2ME. Mỗi phiên bản cung cấp một môi trường đ ầy đủ để chạy ứng dụng Java, bao gồm máy ảo Java (JVM) và các thư viện lớp để lập trình ứng dụng (Java API). Ba phiên bản trên nhắm vào ứng dụng trên ba loại thiết bị khác nhau, với phiên bản J2ME cho thiết bị di động cầm tay hoặc thiết bị nhúng.

Minh họa 3 phiên bản của Java như sau :

</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">

Các đặc trưng và quy định trong phiên bản J2ME được định nghĩa thông qua cộng đồng JCP (Java Community Process), như đã thực hiện với hai phiên bản J2SE và J2EE. Hiện nay có kho ảng 40 bộ phận độc lập để giải quyết cho vấn đề lập trình phiên bản J2ME, là một chủ đề nóng trong cộng đồng Java, tại địa chỉ www.jcp.org.

Phiên bản J2ME địi hỏi có sự hạn chế đối với thiết bị phát triển ứng dụng, có giới hạn về bộ nhớ, kích thước màn hình nhỏ, phương pháp nhập liệu thay đổi và tốc độ xử lý thấp. Gồm những thiết bị như điện thoại di động, máy nhắn tin, PDA,... và hiện nay hầu hết các sản phẩm phần mềm ứng dụng trên điện tho ại di động được phát triển bằng công nghệ J2ME.

Phần lõi của công nghệ J2ME gồm 3 yếu tố sau: cấu hình (configuration), mơ tả (profile) và các gói tùy chọn (optional packages). Chúng xác định các đặc tính của Java sẽ sử dụng trong J2ME, gồm cả giao diện lập trình ứng dụng (API) và

<b>việc đóng gói một ứng dụng J2ME. </b>

<i><b>1.3.1.2. Môi trường phát triển của J2ME </b></i>

Để phát triển ứng dụng theo công nghệ J2ME chúng ta phải sử dụng môi trường phát triển với các chức năng cơ bản như biên dịch và đóng gói một ứng dụng J2ME, đặc biệt phải có một bộ Emulator để thử nghiệm ứng dụng J2ME trên mơi trường máy tính như là trên thiết bị di động. Hiện nay có một số mơi trường như j2mepolish-1.2.4, sun java wireless toolkit, netbean,... Ở đây chúng ta s ử dụng môi trường của hãng Sun cung cấp khá dễ dàng và đầy đủ (sử dụng NetBeans).

Các thành phần cơ bản của J2ME: a) Thành phần cấu hình - Configuration

<b>J</b>

</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">

Cấu hình là một bộ đầy đ ủ môi trường chạy c ủa Java, bao gồm ba thành phần sau :

 Một máy ảo Java (JVM) để thi hành các mã byte của chương trình Java.  Hệ thống mã thực thi làm giao diện với hệ thống thiết bị vật lý

 Tập các lớp của thư viện lõi của Java

Để sử dụng một cấu hình, một thiết bị phải chắc chắn đúng với những địi hỏi tối thiểu đã định nghĩa trong đó. Mặc dù một cấu hình cung c ấp một mơi trường Java hoàn chỉnh, tập các lớp lõi là khá nhỏ nhưng phải được tăng cường thêm các lớp bởi thành phần profile của J2ME hoặc bởi bộ cấu hình. Thực tế cấu hình khơng định nghĩa bất kỳ một lớp giao diện người dùng nào.

J2ME định nghĩa hai loại cấu hình, Connected Limited Device Configuration (CLDC) và Connected Device Configuration (CDC). CLDC dành cho các thi ết bị có những hạn chế về dung lượng bộ nhớ nhỏ, tốc độ xử lý thấp. Máy ảo Java được sử dụng ở đây có tên là KVM (Kilobyte Virtual Machine), là một bộ phận con của JVM và chỉ chạy cho các chương trình nhỏ, nó chứa các lớp lõi cơ bản tối thiểu như các gói java.lang, java.io, java.util và một số lớp trong gói java.microedition.io. M ặt khác CDC sử dụng máy ảo Java có tên là CVM và chứa một lượng các lớp lớn hơn CLDC, vì vậy nó địi hỏi thiết bị có nhiều bộ nhớ hơn và tốc độ xử lý nhanh hơn.

Hình vẽ sau mô tả mối tương quan giữa hai gói cấu hình CDC và CLDC với J2SE.

b) Thành phần mô tả - Profile

</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">

Các gói cấu hình đã giúp để phân biệt các lo ại thiết bị khác nhau. Nhưng vì có rất nhiều thiết bị khác xung quanh mỗi loại vẫn phải được tiếp tục hoàn thiện bởi vì một gói c ấu hình có thể bao gồm nhiều thiết bị được áp dụng là khác nhau như điện thoại di động, tủ lạnh, hoặc máy giặt. Điện thoại di động và máy giặt có thể thuộc về cùng một gói c ấu hình nhưng rõ ràng là một ứng dụng điện thoại di động khơng phải có cùng chức năng để chạy trên các máy giặt hoặc ngược lại. Như vậy, J2ME cung cấp các khái niệm về một gói mơ tả (profiles) để đạt được tính thích nghi của môi trường ứng dụng.

Một gói mơ tả trong J2ME gi ải quyết các nhu cầu cụ thể của một số phân khúc sản phẩm theo chiều dọc (ví dụ như ngân hàng hoặc ứng dụng thanh toán) hoặc theo chủng loại thiết bị. Theo đó, gói mơ tả có thể bao gồm các thư viện được thêm nhằm làm phù hợp với nhiều thiết bị cụ thể hơn là các thư viện được cung cấp trong một cấu hình. Gói mơ tả được thực hiện trên một cấu hình. Các ứng dụng khi đó được viết dựa trên một gói mơ tả cụ thể, như là gói mơ tả được dành cho một cấu hình cụ thể. Cả gói cấu hình và gói mô t ả xác định một tập hợp các lớp Java API được sử dụng bởi các ứng dụng. Một thiết bị được thiết kế để hỗ trợ một hoặc một số gói mơ tả, chấp nhận để thực thi tất cả các tính năng và lớp Java API được chỉ định bởi gói mơ tả và gói cấu hình tương ứng.

Từ quan điểm triển khai, một gói mơ tả như là một bộ sưu tập các Java API gồm thư viện các lớp đối tượng lưu trú trên một gói cấu hình và cung cấp những tính năng cụ thể đối với các thiết bị trong một phân khúc sản phẩm cụ thể.

J2ME hiện nay cung cấp một số gói mơ tả cơ bản như sau:

- MIDP (Mobile Information Device Profiles): gói mô tả cho các thiết bị thông tin di động (điện thoại di động). Bằng cách xây dựng dựa trên CLDC, gói mơ tả này sẽ cung cấp một nền tảng tiêu chuẩn cho thiết bị thơng tin di động kích thước nhỏ, có hạn chế về tài nguyên vật lý, dây kết không dây như điện tho ại di động, máy nhắn tin hai chiều. Ngoài việc kết nối không dây, các thiết bị này có màn hình nhỏ, bộ phận thu đầu vào hạn chế, hạn chế bộ nhớ lưu trữ cục bộ, tuổi thọ pin và khả năng tính toán xử lý của CPU.

</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20">

- Foundation Profiles (FP): Gói mơ t ả này phục vụ hai mục đích. Thứ nhất, nó cung c ấp một gói mơ tả của nền tảng Java thế hệ 2 phù hợp cho các thiết bị cần được hỗ trợ cho một mơi trường Java giàu tính kết nối mạng, nhưng không yêu cầu một giao diện người dùng đồ họa. Thứ hai, nó sẽ cung cấp một gói mơ tả cơ bản bao gồm các mô tả cần phải xây dựng trên khả năng mà nó có cung cấp bằng cách thêm vào như giao diện người dùng đồ họa hay các tính năng khác.

- Một số gói mơ tả khác như: Personal Profile để chạy trên gói c ấu hình CDC, RMI để chạy trên nền của gói FP và CDC, PDA để chạy trên gói cấu hình CLDC.

c) Thành phần tùy chọn – Optional Packages

Là các gói thư viện cung cấp các tính năng thêm cho mơi trường ứng dụng, như là các thư viện xử lý đa phương tiện, thư viện xử lý đồ họa không gian...

Sau đây là hình vẽ minh họa các thành phần trong cơng nghệ J2ME và quan hệ với 2 hướng công nghệ khác là J2SE và J2EE. Thành phần máy ảo java trong công nghệ J2ME dùng cho gói cấu hình CLDC đó là KVM (Kylơbyte Virtual Machine).

Các bước chính để phát triển một ứng dụng J2ME như sau:

<b>Bước 1) Xác định cụ thể loại thiết bị sẽ chạy ứng dụng để lập chương trình phù hợp </b>

với thiết bị đó (trình bày ở phần sau).

<b>Bước 2) Lập chương trình bằng ngơn ngữ Java theo cơng nghệ J2ME để thực hiện </b>

bài tốn đặt ra, có thể sử dụng một trong các chương trình soạn thảo bất kỳ nhưng

</div><span class="text_page_counter">Trang 21</span><div class="page_container" data-page="21">

phải lưu vào máy dạng text, khơng có định dạng. Ví dụ như NotePad, WordPad, hay thậm chí JCreator.

<b>Bước 3) Dịch chương trình và đóng gói thành một ứng dụng J2ME, sử dụng </b>

mô-đun KToolbar của Wireless Toolkit hoặc tích hợp sẵn trong NetBean.

<b>Bước 4) Chạy thử nghiệm ứng dụng trên phần mềm Emulator (trong NetBean được tích hợp sẵn). </b>

<b>1.3.2. Cách lập trình trong J2ME </b>

a) Khái niệm về midlet và bộ midlet (midlet suit)

Để ứng dụng vào các thiết bị điện thoại di động, chúng ta sử dụng gói thư viện và c ấu hình trong J2ME là MIDP và CLDC. Tất cả các ứng dụng c ủa Java được chạy trên các thiết bị hỗ trợ MIDP/CLDC đều được coi là các midlet. Một midlet luôn phải bao gồm ít nhất một lớp được thừa kế từ lớp trừu tượng MIDlet khai báo trong gói thư viện sau và cần được nạp ngay đầu chương trình bằng lệnh:

<i><b>import javax.microedition.midlet.*; </b></i>

Một midlet có thể sử dụng các phương thức của lớp MIDlet để được phục vụ từ môi trường thực thi JVM, để làm điều này midlet chỉ cần sử dụng các hàm API đã được định nghĩa trong MIDP.

Một nhóm các midlet có quan hệ và được tập hợp lại được gọi là một bộ midlet (midlet suite). Tất cả các midlet trong một bộ được đóng gói (packaged) và cài đặt lên thiết bị như là một đơn thực thể, các MIDlet này có thể cùng bị hủy cài đặt hoặc loại bỏ khỏi thiết bị cùng một lúc. Các midlet trong một bộ có thể chia sẻ các thành phần tĩnh và các nguồn tài nguyên của môi trường thực thi:

• Tại thời điểm thực thi, nếu thiết bị phần cứng có yêu cầu nhiều hơn một midlet được gọi, khi đó các midlet được gọi trong cùng một bộ midlet sẽ thực thi trên cùng một máy ảo Java. Do các midlet được gói trong cùng một bộ nên nó sẽ sử dụng chung các khởi tạo c ủa các lớp và các nguồ n tài nguyên đã được nạp vào trong máy ảo JVM. Điều này có nghĩa là dữ liệu có thể được chia sẻ giữa các midlet,

</div><span class="text_page_counter">Trang 22</span><div class="page_container" data-page="22">

máy ảo Java sẽ đồng bộ hóa (synchronization) các nguồn tài nguyên này để bảo vệ các truy nhập từ các midlet hoặc các bộ midlet khác trong quá trình thực thi.

• Dữ liệu lưu trữ trên thiết bị được quản lý theo cấp độ của bộ midlet. Các midlet trong cùng một bộ có thể truy cập đến các vùng dữ liệu của nhau. Tuy nhiên một midlet trong bộ này sẽ không được quyền truy cập đến vùng dữ liệu của midlet nằm trong bộ khác.

b) Vòng đời của midlet

Một midlet gồm tập hợp các pha đóng vai trị là các thành phần của một vòng đời midlet, các pha này luôn luôn được đặt ở một trong ba trạng thái sau:

• Pause: Một midlet được đặt vào trạng thái dừng ngay sau khi cấu tử (constructor) được gọi nhưng trước khi bộ quản lý ứng dụng được khởi động. Khi một midlet được khởi động, nó có thể chuyển sang các trạng thái Pause hoặc Active nhiều lần trong một vịng đời.

• Active: Trạng thái này cho biết một midlet đang được thực thi.

• Destroy: Một midlet được giải phóng các tài nguyên mà nó chiếm giữ và được đóng lại bởi trình quản lý ứng dụng.

Lớp MIDlet hỗ trợ một số phương thức cơ bản để giúp chuyển đổi các trạng thái theo sơ đồ sau:

</div><span class="text_page_counter">Trang 23</span><div class="page_container" data-page="23">

Trong đó, phương thức “startApp” thường được ghi đè để thực hiện các hành động ban đầu khi chương trình chạy mà chúng ta mong muốn. Còn hai phương thức “pauseApp” và “destroyApp” vẫn được ghi đè nhưng nội dung có thể để trống nếu không muốn. Lý do c ần phải ghi đè c ả 3 phương thức trên là chúng đều ở dạng trừu tượng (abstract) trong lớp cơ sở MIDlet của MIDP/CLDC.

c) Khởi tạo một ứng dụng midlet

Như đã trình bày, một ứng dụng midlet có thể bao gồm nhiều lớp nhưng ít nhất ln phải có một lớp được thừa kế từ lớp trừu tượng MIDlet được định nghĩa trong gói javax.microedition.midlet. Cấu trúc cơ bản của một ứng dụng midlet được định nghĩa như sau:

<i><b>import javax.microedition.midlet.*; </b></i>

<i><b>public class name_of_class extends MIDlet { </b></i>

<i><b> /* ... MỘT SỐ NỘI DUNG KHÁC ...*/ </b></i>

<i><b> public void startApp(){ </b></i>

<i><b> /* ... NỘI DUNG KHỞI CHẠY CHƯƠNG TRÌNH ...*/ </b></i>

<i><b> } </b></i>

<i><b> public void pauseApp(){} </b></i>

<i><b> public void destroyApp(boolean dk){} </b></i>

<i><b>} </b></i>

Sau đây là bảng các hàm API của lớp MIDlet.

<i>Giao tiếp giữa bộ quản lý ứng dụng với MIDlet </i>

<b>abstract void startApp() </b> MIDlet được đặt vào trạng thái kích hoạt

<b>abstract void pauseApp() </b> MIDlet được đặt vào tạng thái tạm dừng abstract void

<b>destroyApp(boolean dk) </b>

MIDlet được giải phóng

</div><span class="text_page_counter">Trang 24</span><div class="page_container" data-page="24">

<i>Giao tiếp giữa MIDlet và bộ quản lý ứng dụng </i>

<b>final void notifyDestroyed() </b> MIDlet yêu cầu được giải phóng

<b>final void notifyPaused() </b> MIDlet yêu cầu được tạm dừng

<b>final void resumeRequest() </b> MIDlet yêu cầu được kích hoạt.

<i>Truy cập thuộc tính của một MIDlet từ bộquản lý ứng dụng </i>

<b>final String getAppProperty </b>

(String key)

Nhận các thuộc tính từcác JAD và JAR files.

 Ví dụ 2.1: Lập trình một midlet để hiện thị lên màn hình thơng báo các thơng tin cá nhân của một người trong thời gian 15 giây.

Trong ví dụ này sử dụng lớp đối tượng Alert sẽ được trình bày chi tiết ở phần sau.

import javax.microedition.lcdui.*; import javax.microedition.midlet.*;

public class Vidu2_1 extends MIDlet { public void startApp() {

Alert tb = new Alert("THÔNG TIN CÁ NHÂN", " Họ tên: Nguyễn Văn An"+

"\n Ns: 10/11/1976"+ "\n Quê quán: Hà Nội", null, AlertType.INFO); tb.setTimeout(15000);

Display.getDisplay(this).setCurrent(tb); }

public void pauseApp() {}

public void destroyApp(boolean t) {} }

Màn hình kết quả chạy chương trình trên netbean như sau:

</div><span class="text_page_counter">Trang 25</span><div class="page_container" data-page="25">

<i><b>Chúc Anh/ Chị học tập tốt! </b></i>

</div><span class="text_page_counter">Trang 26</span><div class="page_container" data-page="26">

<b>BÀI 2: KỸ THUẬT LẬP TRÌNH NÂNG CAO TRONG J2ME </b>

<i><b>Mục tiêu: </b></i>

Trong bài này, Anh/Chị cần đạt được những mục tiêu sau:

1. Phương pháp xử lý đồ họa trong J2ME - Xử lý đồ họa mức cao (Screen) - Xử lý đồ họa mức thấp (Canvas) 2. Phương pháp lưu trữ dữ liệu bằng RMS

<i><b>Nội dung: </b></i>

<b>Chương 2: CƠNG NGHỆ J2ME CHO LẬP TRÌNH MOBILE </b>

<b>2.1. Giới thiệu về công nghệ J2ME </b>

<b>2.1.1. Cơng nghệ J2ME của ngơn ngữ lập trình Java </b>

Ngơn ngữ lập trình Java bước đầu được phát triển để xây dựng các ứng dụng ở máy đầu cuối (máy khách), sau đó được mở rộng và phát triển để xây dựng các ứng dụng máy chủ. Hiện nay nó có ba phiên bản chính đó là J2SE, J2EE và J2ME. Mỗi phiên bản cung c ấp một môi trường đ ầy đủ để chạy ứng dụng Java, bao gồm máy ảo Java (JVM) và các thư viện lớp để lập trình ứng dụng (Java API). Ba phiên bản trên nhắm vào ứng dụng trên ba loại thiết bị khác nhau, với phiên bản J2ME cho thiết bị di động cầm tay hoặc thiết bị nhúng.

Minh họa 3 phiên bản của Java như sau :

Các đặc trưng và quy định trong phiên bản J2ME được định nghĩa thông qua cộng đồng JCP (Java Community Process), như đã thực hiện với hai phiên bản J2SE và J2EE. Hiện nay có kho ảng 40 bộ phận độc lập để giải quyết cho vấn đề lập trình phiên bản J2ME, là một chủ đề nóng trong cộng đồng Java, tại địa chỉ www.jcp.org.

<b>J</b>

</div><span class="text_page_counter">Trang 27</span><div class="page_container" data-page="27">

Phiên bản J2ME đòi hỏi có sự hạn chế đối với thiết bị phát triển ứng dụng, có giới hạn về bộ nhớ, kích thước màn hình nhỏ, phương pháp nhập liệu thay đổi và tốc độ xử lý thấp. Gồm những thiết bị như điện thoại di động, máy nhắn tin, PDA,... và hiện nay hầu hết các sản phẩm phần mềm ứng dụng trên điện tho ại di động được phát triển bằng công nghệ J2ME.

Phần lõi của công nghệ J2ME gồ m 3 yếu tố sau: cấu hình (configuration), mơ tả (profile) và các gói tùy chọ n (optional packages). Chúng xác định các đặc tính của Java sẽ sử dụng trong J2ME, gồm cả giao diện lập trình ứng dụng (AP I) và việc đóng gói một ứng dụng J2ME.

<b>2.1.2. Môi trường phát triển của J2ME </b>

Để phát triển ứng dụng theo công nghệ J2ME chúng ta phải sử dụng môi trường phát triển với các chức năng cơ bản như biên dịch và đóng gói một ứng dụng J2ME, đặc biệt phải có một bộ Emulator để thử nghiệm ứng dụng J2ME trên môi trường máy tính như là trên thiết bị di động. Hiện nay có một số mơi trường như j2mepolish-1.2.4, sun java wireless toolkit, netbean,... Ở đây chúng ta s ử dụng môi trường của hãng Sun cung cấp khá dễ dàng và đầy đủ (sử dụng NetBeans).

Các thành phần cơ bản của J2ME: a) Thành phần cấu hình - Configuration

Cấu hình là một bộ đ ầy đ ủ môi trường chạy của Java, bao gồm ba thành phần sau :

• Một máy ảo Java (JVM) để thi hành các mã byte của chương trình Java. • Hệ thống mã thực thi làm giao diện với hệ thống thiết bị vật lý

• Tập các lớp của thư viện lõi của Java

Để sử dụng một cấu hình, một thiết bị phải chắc chắn đúng với những đòi hỏi tối thiểu đã định nghĩa trong đó. Mặc dù một cấu hình cung c ấp một môi trường Java hoàn chỉnh, tập các lớp lõi là khá nhỏ nhưng phải được tăng cường thêm các lớp bởi thành phần profile của J2ME hoặc bởi bộ cấu hình. Thực tế cấu hình khơng định nghĩa bất kỳ một lớp giao diện người dùng nào.

J2ME định nghĩa hai loại cấu hình, Connected Limited Device Configuration (CLDC) và Connected Device Configuration (CDC). CLDC dành cho các thiết bị có những hạn chế về dung lượng bộ nhớ nhỏ, tốc độ xử lý thấp. Máy ảo Java được sử dụng ở đây có tên là KVM (Kilobyte Virtual Machine), là một bộ phận con của JVM và chỉ chạy cho các chương trình nhỏ, nó chứa các lớp lõi cơ bản tối thiểu như các gói java.lang, java.io, java.util và một số lớp trong gói java.microedition.io. M ặt

</div><span class="text_page_counter">Trang 28</span><div class="page_container" data-page="28">

khác CDC sử dụng máy ảo Java có tên là CVM và chứa một lượng các lớp lớn hơn CLDC, vì vậy nó địi hỏi thiết bị có nhiều bộ nhớ hơn và tốc độ xử lý nhanh hơn.

Hình vẽ sau mô tả mối tương quan giữa hai gói cấu hình CDC và CLDC với J2SE.

b) Thành phần mô tả - Profile

Các gói c ấu hình đã giúp để phân biệt các loại thiết bị khác nhau. Nhưng vì có rất nhiều thiết bị khác xung quanh mỗi loại vẫn phải được tiếp tục hồn thiện bởi vì một gói c ấu hình có thể bao gồm nhiều thiết bị được áp dụng là khác nhau như điện thoại di động, tủ lạnh, hoặc máy giặt. Điện tho ại di động và máy giặt có thể thuộc về cùng một gói cấu hình nhưng rõ ràng là một ứng dụng điện thoại di động không phải có cùng chức năng để chạy trên các máy gi ặt hoặc ngược lại. Như vậy, J2ME cung cấp các khái niệm về một gói mơ tả (profiles) để đạt được tính thích nghi của mơi trường ứng dụng.

Một gói mơ tả trong J2ME giải quyết các nhu cầu cụ thể của một số phân khúc sản phẩm theo chiều dọc (ví dụ như ngân hàng ho ặc ứng dụng thanh toán) ho ặc theo chủng loại thiết bị. Theo đó, gói mơ t ả có thể bao gồm các thư viện được thêm nhằm làm phù hợp với nhiều thiết bị cụ thể hơn là các thư viện được cung c ấp trong một cấu hình. Gói mơ tả được thực hiện trên một cấu hình. Các ứng dụng khi đó được viết dựa trên một gói mơ tả cụ thể, như là gói mơ tả được dành cho một cấu hình cụ thể. Cả gói cấu hình và gói mơ tả xác định một tập hợp các lớp Java AP I được sử dụng bởi các ứng dụng. Một thiết bị được thiết kế để hỗ trợ một hoặc một số gói mơ tả, chấp nhận để thực thi tất cả các tính năng và lớp Java API được chỉ định bởi gói mơ tả và gói cấu hình tương ứng.

Từ quan điểm triển khai, một gói mơ tả như là một bộ sưu tập các Java AP I gồm thư viện các lớp đối tượng lưu trú trên một gói cấu hình và cung cấp những tính năng cụ thể đối với các thiết bị trong một phân khúc sản phẩm cụ thể.

J2ME hiện nay cung cấp một số gói mơ tả cơ bản như sau:

</div><span class="text_page_counter">Trang 29</span><div class="page_container" data-page="29">

- MIDP (Mobile Information Device Profiles): gói mơ tả cho các thiết bị thông tin di động (điện thoại di động). Bằng cách xây dựng dựa trên CLDC, gói mơ tả này sẽ cung cấp một nền tảng tiêu chuẩn cho thiết bị thơng tin di động kích thước nhỏ, có hạn chế về tài nguyên vật lý, dây kết không dây như điện thoại di động, máy nhắn tin hai chiều. Ngồi việc kết nối khơng dây, các thiết bị này có màn hình nhỏ, bộ phận thu đ ầu vào hạn chế, hạn chế bộ nhớ lưu trữ cục bộ, tuổi thọ pin và khả năng tính tốn xử lý của CPU.

- Foundation Profiles (FP): Gói mơ t ả này phục vụ hai mục đích. Thứ nhất, nó cung cấp một gói mơ tả của nền tảng Java thế hệ 2 phù hợp cho các thiết bị cần được hỗ trợ cho một mơi trường Java giàu tính kết nối mạng, nhưng khơng yêu cầu một giao diện người dùng đồ họa. Thứ hai, nó sẽ cung cấp một gói mơ tả cơ bản bao gồm các mô tả cần phải xây dựng trên khả năng mà nó có cung cấp bằng cách thêm vào như giao diện người dùng đồ họa hay các tính năng khác.

- Một số gói mơ tả khác như: Personal Profile để chạy trên gói c ấu hình CDC, RMI để chạy trên nền của gói FP và CDC, PDA để chạy trên gói cấu hình CLDC.

c) Thành phần tùy chọn – Optional Packages

Là các gói thư viện cung cấp các tính năng thêm cho mơi trường ứng dụng, như là các thư viện xử lý đa phương tiện, thư viện xử lý đồ họa không gian...

Sau đây là hình vẽ minh họa các thành phần trong cơng nghệ J2ME và quan hệ với 2 hướng công nghệ khác là J2SE và J2EE. Thành phần máy ảo java trong công nghệ J2ME dùng cho gói cấu hình CLDC đó là KVM (Kylơbyte Virtual Machine).

Các bước chính để phát triển một ứng dụng J2ME như sau:

<b>Bước 1) Xác định cụ thể loại thiết bị sẽ chạy ứng dụng để lập chương trình </b>

phù hợp với thiết bị đó (trình bày ở phần sau).

</div><span class="text_page_counter">Trang 30</span><div class="page_container" data-page="30">

<b>Bước 2) Lập chương trình bằng ngôn ngữ Java theo công nghệ J2ME để thực </b>

hiện bài toán đặt ra, có thể sử dụng một trong các chương trình soạn thảo bất kỳ nhưng phải lưu vào máy dạng text, không có định dạng. Ví dụ như NotePad, WordPad, hay thậm chí JCreator.

<b>Bước 3) Dịch chương trình và đóng gói thành một ứng dụng J2ME, sử dụng </b>

mô-đun KToolbar của Wireless Toolkit hoặc tích hợp sẵn trong NetBean.

<b>Bước 4) Chạy thử nghiệm ứng dụng trên phần mềm Emulator (trong NetBean </b>

được tích hợp sẵn).

2.1.3. Cách lập trình trong J2ME

a) Khái niệm về midlet và bộ midlet (midlet suit)

Để ứng dụng vào các thiết bị điện thoại di động, chúng ta sử dụng gói thư viện và cấu hình trong J2ME là MIDP và CLDC. Tất cả các ứng dụng của Java được chạy trên các thiết bị hỗ trợ MIDP/CLDC đều được coi là các midlet. Một midlet ln phải bao gồm ít nhất một lớp được thừa kế từ lớp trừu tượng MIDlet khai báo trong gói thư viện sau và cần được nạp ngay đầu chương trình bằng lệnh:

<i><b>import javax.microedition.midlet.*; </b></i>

Một midlet có thể sử dụng các phương thức của lớp MIDlet để được phục vụ từ môi trường thực thi JVM, để làm điều này midlet chỉ cần sử dụng các hàm AP I đã được định nghĩa trong MIDP.

Một nhóm các midlet có quan hệ và được tập hợp lại được gọi là một bộ midlet (midlet suite). Tất cả các midlet trong một bộ được đóng gói (packaged) và cài đặt lên thiết bị như là một đơn thực thể, các MIDlet này có thể cùng bị hủy cài đặt hoặc loại bỏ khỏi thiết bị cùng một lúc. Các midlet trong một bộ có thể chia sẻ các thành phần tĩnh và các nguồn tài nguyên của mơi trường thực thi:

• Tại thời điểm thực thi, nếu thiết bị phần cứng có yêu cầu nhiều hơn một midlet được gọi, khi đó các midlet được gọi trong cùng một bộ midlet sẽ thực thi trên cùng một máy ảo Java. Do các midlet được gói trong cùng một bộ nên nó sẽ sử dụng chung các khởi tạo c ủa các lớp và các nguồ n tài nguyên đã được nạp vào trong máy ảo JVM. Điều này có nghĩa là dữ liệu có thể được chia sẻ giữa các midlet, máy ảo Java sẽ đồng bộ hóa (synchronization) các nguồn tài nguyên này để bảo vệ các truy nhập từ các midlet hoặc các bộ midlet khác trong quá trình thực thi.

• Dữ liệu lưu trữ trên thiết bị được quản lý theo cấp độ của bộ midlet. Các midlet trong cùng một bộ có thể truy cập đến các vùng dữ liệu của nhau. Tuy nhiên một midlet trong bộ này sẽ không được quyền truy cập đến vùng dữ liệu của midlet nằm trong bộ khác.

</div><span class="text_page_counter">Trang 31</span><div class="page_container" data-page="31">

b) Vòng đời của midlet

Một midlet gồm tập hợp các pha đóng vai trò là các thành phần của một vòng đời midlet, các pha này luôn luôn được đặt ở một trong ba trạng thái sau:

• Pause: Một midlet được đặt vào trạng thái dừng ngay sau khi cấu tử (constructor) được gọi nhưng trước khi bộ quản lý ứng dụng được khởi động. Khi một midlet được khởi động, nó có thể chuyển sang các trạng thái Pause hoặc Active nhiều lần trong một vòng đời.

• Active: Trạng thái này cho biết một midlet đang được thực thi.

• Destroy: Một midlet được giải phóng các tài nguyên mà nó chiếm giữ và được đóng lại bởi trình quản lý ứng dụng.

Lớp MIDlet hỗ trợ một số phương thức cơ bản để giúp chuyển đổi các trạng thái theo sơ đồ sau:

Trong đó, phương thức “startApp” thường được ghi đè để thực hiện các hành động ban đầu khi chương trình chạy mà chúng ta mong muốn. Còn hai phương thức “pauseApp” và “destroyApp” vẫn được ghi đè nhưng nội dung có thể để trống nếu không muốn. Lý do c ần phải ghi đè c ả 3 phương thức trên là chúng đều ở dạng trừu tượng (abstract) trong lớp cơ sở MIDlet của MIDP/CLDC.

c) Khởi tạo một ứng dụng midlet

Như đã trình bày, một ứng dụng midlet có thể bao gồm nhiều lớp nhưng ít nhất ln phải có một lớp được thừa kế từ lớp trừu tượng MIDlet được định nghĩa trong gói javax.microedition.midlet. Cấu trúc cơ bản của một ứng dụng midlet được định nghĩa như sau:

</div><span class="text_page_counter">Trang 32</span><div class="page_container" data-page="32">

<i><b>import javax.microedition.midlet.*; </b></i>

<i><b>public class name_of_class extends MIDlet { /* ... MỘT SỐ NỘI DUNG KHÁC ...*/ public void startApp(){ </b></i>

<i><b> /* ... NỘI DUNG KHỞI CHẠY CHƯƠNG TRÌNH ...*/ } </b></i>

<i><b> public void pauseApp(){} </b></i>

<i><b> public void destroyApp(boolean dk){} } </b></i>

Sau đây là bảng các hàm API của lớp MIDlet.

<i>Giao tiếp giữa bộ quản lý ứng dụng với MIDlet </i>

<b>abstract void startApp() </b> MIDlet được đặt vào trạng thái kích hoạt

<b>abstract void pauseApp() </b> MIDlet được đặt vào tạng thái tạm dừng abstract void

<b>destroyApp(boolean dk) </b>

MIDlet được giải phóng

<i>Giao tiếp giữa MIDlet và bộ quản lý ứng dụng </i>

<b>final void notifyDestroyed() </b> MIDlet yêu cầu được giải phóng

<b>final void notifyPaused() </b> MIDlet yêu cầu được tạm dừng

<b>final void resumeRequest() </b> MIDlet yêu cầu được kích hoạt.

<i>Truy cập thuộc tính của một MIDlet từ bộquản lý ứng dụng </i>

<b>final String getAppProperty </b>

(String key)

Nhận các thuộc tính từcác JAD và JAR files.

<b>2.2. Phương pháp xử lý đồ họa trong J2ME </b>

<b>2.2.1. Cơ chế lập trình xử lý đồ họa trong J2ME </b>

MIDP/CLDC cung cấp các lớp giao diện người dùng GUI (Graphics User Interface) trong hai gói chính là javax.mircoedtion.lcdui và javax.microedition.lcdui.game. Các lớp trợ giúp xử lý đồ họa trong MIDP/CLDC được phân chia thành 2 nhóm gồm nhóm ở mức ứng dụng (hay mức cao) và nhóm ở mức thấp (high and low-level groups).

</div><span class="text_page_counter">Trang 33</span><div class="page_container" data-page="33">

- Các lớp giao diện mức cao cung c ấp các giao diện cơ bản giữa người dùng với ứng dụng cho phép người dùng thao tác trực tiếp với ứng dụng thông qua các đối tượng cơ bản như: các nút lệnh, danh sách, thông báo,… Các lớp giao diện mức cao có thể đáp ứng yêu cầu cơ bản c ủa một ứng dụng midlet, tuy nhiên mặt hạn chế của các giao diện mức cao là người dùng khó thậm chí là khơng thể tùy biến về mặt giao diện (chẳng hạn việc chọn bút vẽ lên màn hình, dùng các nút di chuyển một hình ảnh trên màn hình…).

- Để đáp ứng yêu cầu trên MIDP/CLDC đã hỗ trợ các lớp giao diện mức thấp cho phép lập trình viên có thể phát triển các ứng dụng có độ tương tác với người dùng linh hoạt hơn, hai lớp Canvas và Graphics là hạt nhân cơ bản các lớp giao diện mức thấp.

Các lớp giao diện người dùng có thể biểu diễn trên sơ đồ sau.

Bảng mô tả chức năng, ý nghĩa của các lớp trên như sau:

</div><span class="text_page_counter">Trang 34</span><div class="page_container" data-page="34">

List Màn hình danh sách lựa chọn Alert Màn hình thơng báo

Form Màn hình dạng cửa sổ (form) chứa các thành phần (item) khác

Item Đối tượng thành phần hiển thị trên Form StringItem Hiển thị văn bản

ImageItem Hiển thị ảnh

TextField Ô nhập hoặc hiển thị dữ liệu DateField Chọn ngày tháng, thời gian Gauge Hiển thị hoặc chọn tiến trình ChoiceGroup Danh sách lựa chọn

CustomItem Thành phần tự do theo sự thiết lập tùy biến

Canvas Đối tượng nàn hình chứa nội dung hiển thị mức thấp GameCanvas Màn hình vẽ phục vụ làm trò chơi

LayerManager Quản lý các tầng hiển thị Layer Đối tượng tầng hiển thị

Tiledlayer Tầng nền

Command Đối tượng lệnh đặt lên màn hình cho người dùng tương tác

Graphics Đối tượng để vẽ đồ họa trên màn hình ở mức thấp

Như mơ tả ở bảng trên, để quản lý sự hiển thị trên màn hình chúng ta cần đối tượng Display. Đối tượng này chỉ được xác định thông qua phương thức tĩnh sau và dựa trên đối tượng midlet của chương trình.

<i><b>  = Display.getDisplay(  ); </b></i>

Trong đó phần tham số lệnh () là đối tượng midlet của chương trình. Nếu lệnh này nếu được viết bên trong lớp chương trình kế thừa MIDlet thì thường chúng ta viết nó là “this”.

Sau đây là bảng mô tả một số lệnh bên trong lớp đối tượng Display.

</div><span class="text_page_counter">Trang 35</span><div class="page_container" data-page="35">

*.setCurrent( disp_able ) Đặt đối tượng hiển thị lên màn hình (Displayable) *.setCurrent( Alert, d2 ) Đặt thơng báo hiển thị lên màn hình (Alert) và hết

thời hạn thông báo sẽ tự chuyển sang đối tượng d2 *.setCurrentItem( item ) Đặt focus đến thành phần (item) được chỉ định trên

màn hình hiện tại và có chứa item đó *.getCurrent() Lấy đối tượng đang hiển thị trên màn hình

 Ví dụ 2.1: Lập trình một midlet để hiện thị lên màn hình thơng báo các thông tin cá nhân của một người trong thời gian 15 giây.

Trong ví dụ này sử dụng lớp đối tượng Alert sẽ được trình bày chi tiết ở phần sau.

import javax.microedition.lcdui.*; import javax.microedition.midlet.*;

public class Vidu2_1 extends MIDlet { public void startApp() {

Alert tb = new Alert("THÔNG TIN CÁ NHÂN", " Họ tên: Nguyễn Văn An"+

"\n Ns: 10/11/1976"+ "\n Quê quán: Hà Nội", null, AlertType.INFO); tb.setTimeout(15000);

Display.getDisplay(this).setCurrent(tb); }

public void pauseApp() {}

public void destroyApp(boolean t) {} }

Màn hình kết quả chạy chương trình trên netbean như sau:

</div><span class="text_page_counter">Trang 36</span><div class="page_container" data-page="36">

Đặc biệt, chúng ta có đối tượng ticker để tạo một dịng thơng báo trên màn hình và được gắn với một đối tượng khả hiện (Displayable). Lệnh để tạo một ticker như sau:

<i><b>Ticker  = new Ticker( dòng_chữ ); </b></i>

và gắn đối tượng này lên màn hình thông qua một Displayable như sau: .setTicker( <i><b> ); </b></i>

Chẳng hạn, khi chúng ta thêm vào chương trình trên dịng lệnh sau, tb.setTicker( new Ticker(“Hà Nội – Việt Nam”) );

thì sẽ có kết quả là (dòng chữ “Hà Nội – Việt Nam” sẽ chạy phía trên màn hình):

<b>2.2.2. Xử lý đồ họa mức cao (Screen) </b>

Sau đây chúng ta sẽ xem xét cách sử dụng các lớp đối tượng xử lý đồ họa mức cao.

<b>(1) List: là một danh sách t ập hợp của các danh mục (items) cho phép người </b>

dùng lựa chọn. Đối tượng List có thể tồn tại dưới ba dang dạng khác nhau: lựa chọn nhiều mục (multi-selection), lựa chọn một mục (exclusiveselection) và tồn tại ở dạng không tường minh (implicit). Ở dạng không tường minh thường được sử dụng làm menu trong chương trình.

Sau đây là bảng các List API:

<i>List(String title, int listType) </i> Khởi tạo đối tượng List rỗng (khơng có phần tử nào).

<i>- title là tiêu đề của List </i>

<i>- listType là kiểu chọn, sử dụng các kiểu trong </i>

giao diện Choice (trình bày ở phần sau)

<i>List(String title, int listType, String[] stringElements, </i>

Tạo mới một đối tượng List có dữ liệu được khởi tạo sẵn từ các mảng tên mục chọn

</div><span class="text_page_counter">Trang 37</span><div class="page_container" data-page="37">

<i>Image[] imageElements) (stringElements) và mảng biểu tượng ảnh (imageElements). Có thể đặt null các mảng này </i>

nếu khơng có dữ liệu.

<i>int append(String stringPart, Image imagePart) </i>

<i>Thêm mục chọn (gồm tên mục stringPart và ảnh biểu tượng imagePart) vào List. Kết quả </i>

trả về vị trí cuối cùng của phần tử mới được thêm vào.

<i>void delete(int elementNum) Xóa một phần tử tại vị trị elementNum void insert(int elementNum, </i>

<i>String stringPart, Image imagePart) </i>

<i>Thêm mới một phần tử tại vị trí elemetntNum </i>

<i>void set(int elementNum, String stringPart, Image imagePart) </i>

Thiết lập hoặc thay thế một phần tử tại vị trí

<i>elementNum, boolean selected) </i>

Thiết lập trạng thái được chọn ho ặc không của

<i>một phần tử tại vị trí elementNum </i>

int

getSelectedFlags( boolean[]

<i>selectedArray_return) </i>

Lấy và lưu trạng thái chọn của các phần tử

<i>trong List vào một mảng selectedArray_return </i>

<i>Kiểm tra xem phần tử tại vị trí elementNum có </i>

được lựa chọn khơng

int size() Trả về số lượng các phần tử có trong danh sách Một đối tượng List là một cài đặt (implements) của giao diện lớp có tên là Choice. Trong giao diện này đã định nghĩa các hằng cơ bản quy định tương ứng ba kiểu danh sách gồm: EXCLUSIVE, MULTIPLE, IMPLICIT. Khi xây dựng một danh sách List ta cần phải xác định kiểu của danh sách sẽ lựa chọn dựa vào ba hằng trên.

Hình vẽ sau minh họa 3 kiểu chọn của List.

</div><span class="text_page_counter">Trang 38</span><div class="page_container" data-page="38">

 Ví dụ 2.2: Lập trình tạo một danh sách chọn trên màn hình các thơng tin bạn bè gồm họ tên, ngày sinh, số điện thoại, email.

import javax.microedition.lcdui.*; import javax.microedition.midlet.*;

public class Vidu2_2 extends MIDlet { public void startApp() {

String m[] = {

"Nguyễn Văn An\n10-11-1990\n0987654321\", "Trần Bích Vân\n3-5-1980\n0901234567\", "Tạ Bích Loan\n20-11-1987\n0912345678\" };

List ds = new List("DANH SÁCH BẠN BÈ", Choice.IMPLICIT,m,null);

Display.getDisplay(this).setCurrent(ds); }

public void pauseApp() {}

public void destroyApp(boolean t) {} }

Kết quả chạy chương trình như sau:

</div><span class="text_page_counter">Trang 39</span><div class="page_container" data-page="39">

<b>(2) TextBox: là đối tượng tạo màn hình nhập dữ liệu, nó được sử dụng trong </b>

những trường hợp cần nhập dữ liệu nhiều. Đối tượng này cho phép người sử dụng nhập dữ liệu trên các phím với các ràng buộc (constrains) để lọc các ký tự nhập vào. TextBox được kế thừa từ lớp Screen, do đó nó là một đối tượng hiển thị độc lập trên màn hình mà không cần phải sử dụng các Container khác để chứa nó.

Bảng các hằng “ràng buộc” của TextBox.

Khởi tạo mộtTextBox

<i>void delete(int offset, int length) Xóa một dãy các ký tự từ offset với độ dài length trong TextBox </i>

<i>void insert(String src, int position) </i> Chèn thêm một xâu vào TextBox

<i>void insert(char[] data, int offset, int length, int position) </i>

Chèn một mảng ký tựvào TextBox từ vị

<i>trí position void setChars(char[] data, int offset, </i>

</div><span class="text_page_counter">Trang 40</span><div class="page_container" data-page="40">

<i>void setString(String text) </i> Thay thế nội dung của TextBox bằng xâu mới

int getConstraints() Trả về ràng buộc hiện thời của TextBox

<i>void setConstraints(int constraints) </i> Thiết lập ràng buộc cho TextBox int getMaxSize() Trả về số lượng ký tự tối đa cho phép

nhập trên TextBox

<i>int setMaxSize(int maxSize) </i> Thiết lập số lượng ký tự chứa tối đa cho TextBox

int getCaretPosition() Trảvềvị trí con trỏ hiện thời

int size() Trả về số lượng ký tự hiện thời của TextBox

 Ví dụ 2.3: Lập trình tạo một màn hình nhập dữ liệu bằng TextBox. import javax.microedition.lcdui.*;

public void pauseApp() {}

public void destroyApp(boolean t) {} }

Kết quả chạy chương trình (sau khi nhập vào đoạn văn bản như hình vẽ) như sau:

</div>

×