Ứng dụng lập trình trên thiết bị di động bằng J2ME: Mục tiêu của J2ME là cho phép người lập trình viết các chương trình ứng ụng độc lập với thiết bị di động, không cần quan tâm đến phần
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA CÔNG NGHỆ THÔNG TIN
BỘ MÔN: HỆ THỐNG NHÚNG
- -
BÁO CÁO CHUYÊN ĐỀ 1
ĐỀ TÀI : Chương trình nghe nhạc trên mobile.
Sinh viên thực hiện : Phan Văn Tuấn
Võ Văn Huy
Lớp : 07T1
Trang 2MỤC LỤC
I Giới thiệu Java và ứng dụng lập trình trên thiết bị di động: 3
I.1 Giới thiệu về Java: 3
I.2 Ứng dụng lập trình trên thiết bị di động bằng J2ME: 3
I.2.1 MIDlet: 4
I.2.2 Đồ họa trong J2ME: 4
1) Đồ họa mức cao: 5
2) Đồ họa mức thấp: 5
I.2.3 Lớp Canvas: 5
I.2.4 Lớp Graphics: 6
I.2.5 Lập trình Bluetooth: 6
II Thư viện lập trình đa phương tiện trong J2ME: 6
III Chương trình: 16
III.1 Nội dung các lớp: 16
III.1.1 Lớp startmusic: 16
III.1.2 Lớp logon: 18
III.1.3 Lớp screensave : 18
III.1.4 Lớp adjustvolume: 21
III.1.5 Lớp midlet playaudio: 22
IV Kết quả: 25
V Kết luận: 29
Trang 3I Giới thiệu Java và ứng dụng lập trình trên thiết bị di động:
I.1 Giới thiệu về Java:
Vào những năm 1990, Java được ra đời từ dự án xanh và ban đầu được xây dựng để kiểm sóat các thí bị dân dụng và một số thiết bị cầm tay Java được xây dựng chủ yếu dựa trong bộ công cụ phát triển (Java Development Kit – JDK) như là thư viện chuẩn trong đó chứa trình biên dịch, trình thông dịch,… Đây chính là nền tảng cho việc phát triển ứng dụng Java Hiện nay các nhà phát triển đã xây dựng nhiều nhánh mới cho Java như:
J2EE ( Java 2 Platform Enterprise Edition): Phiên bản dành cho máy chủ lớn với sức mạnh xử lý và dung lượng bộ nhớ lớn
J2SE ( Java 2 Platform Standard Edition): Phiên bản chuẩn chạy trên các máy PC và laptop
J2ME ( Java 2 Platform Micro Edition): là phiên bản rút gọn của Java cho các thiết
di động giới hạn về bộ nhớ và bộ xử lý
I.2 Ứng dụng lập trình trên thiết bị di động bằng J2ME:
Mục tiêu của J2ME là cho phép người lập trình viết các chương trình ứng ụng độc lập với thiết bị di động, không cần quan tâm đến phần cứng J2ME được xây dựng bằng các tầng khác nhau để giấu đi việc thực hiện phần cứng khỏi nhà phát triển Sau đây là các tầng của J2ME được xây dựng trên CLDC:
Tầng phần cứng thiết bị: đây là thiết bị di động với cấu hình phần cứng của
nó như bộ nhớ, tốc độ xử lý Các thiết bị di động khác nhau có thể có các bộ
xử lý khác nhau với các mã linh khác nhau Mục tiêu của J2ME là cung cấp một chuẩn cho tất cả các loại thiết bị di động khác nhau
Tầng máy ảo Java: Khi mã nguồn Java đựoc biên dịch nó được chuyển đổi thành mã bytecode Mã bytecode này sau đó được chuyển thành mã ngôn ngữ máy của thiết bị di động Tầng máy ảo java bao gồm KVM ( K virtual Machine) là bộ biên dịch mã bytecode có nhiệm vụ chuyển mã bytecode của chương trình Java thành ngôn ngữ máy để chạy trên thiết bị di động tầng này 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ê họat động trên bất kì thiết bị di động nào có J2ME KVM
Ph n c ng thi t b Các API khác
Tầng cấu hình : tầng cấu hình của CLDC định nghĩa giao diện ngôn ngữ Java
cơ bản để cho phép chương trình java chạy trên thiết bị di động Đây là một tập các API định nghĩa lõi của ngôn ngữ J2ME Người lập trình có thể sử dụng các lớp và phương thức của các API này tuy nhiên các API hữu dụng hơn được chứa trong tầng hiện trạng
Trang 4 Tầng hiện trạng: Tầng này cung cấp các API hữu dụng hơn cho người lập trình Mục đích của hiện trạng là xây trên lớp cấu hình và cung cấp nhiều thư viện ứng dụng hơn MIDP định nghia các API riêng biệt cho thiết bị di động Cũng có thể có các hiện trạng và các API khác ngòai MIDP được dùng cho ứng dụng, cũng có thể có một hiện trạng định nghĩa các API cho việc tạo các ứng dụng Bluetooth
Hiện nay, MIDP có hai phiên bản là MIDP 1.0 và MIDP 2.0 và cung cấp:
- Các lớp và các kiểu dữ liệu
- Hỗ trợ đối tượng Display
- Hỗ trợ Form và giao diện người dùng
- Hỗ trợ Timer và Alert
- hỗ trợ Record Management System( RMS) cho việc lưu trữ dữ liệu
Các tính năng nổi bật của MIDP 2.0 so với MIDP 1.0:
- Nâng cấp tính năng bảo mật, hỗ trợ giao thức HTTPS, kiểm sóat việc kết nối máy
di động với server
- Thêm các API hỗ trợ Multimedia
- Mở rộng các tính năng của Form
I.2.1 MIDlet:
Các ứng dụng J2ME được gọi là MIDlet ( Mobile Information Device Applet)
MIDlet là một lớp java mở rộng của lớp trừu tượng
javax.microedition.midlet.MIDlet và thực thi các phương thức startApp(),
public void startApp( ) { }
public void pauseApp( ) { }
public void destroyApp( boolean unconditional ) { }
Trong đó :
o Phương thức exMIDlet là hàm constructor
o Phương thức startApp( ) : được gọi bởi bộ quản lý ứng dụng khi MIDlet được khởi tạo hay khi MIDlet trở về trạng thái tạm dừng
o Phương thức pauseApp( ) : được gọi bởi bộ quản lý ứng dụng mỗi khi ứng dụng cần được tạm dừng
o Phương thức destroyApp( ): được gọi khi thoát khỏi MIDlet
I.2.2 Đồ họa trong J2ME:
Trang 5Các lớp MIDP cung cấp hai mức đồ họa: đồ họa mức thấp và đồ họa mức cao Đồ họa mức cao dùng cho văn bản hay form Đồ họa mức thấp dùng cho các ứng dụng games
Lớp Canvas là một lớp trừu tượng, ta phải tạo các canvas của riêng để vẽ trên lớp
mở rộng này và lớp Canvas cung cấp phương thức:
- paint (Graphics g) để thực hiện vẽ lên canvas
- repaint() để thực hiện vẽ lại các hình đã hiện thị trên màn hình
Mỗi lớp canvas tự động nhận sự kiện của phím bằng cách sử dụng các phương thức:
- void keyPressed (int keyCode): được gọi khi một phím được nhấn
- void keyReleased( int keyCode): được gọi khi một phím được thả
- void keyRepeated( int keyCode): được gọi khi một phím bị giữ
- int getKeyCode(int gameAction): Lấy một mã phím phản hồi lại hành động game xác định trên thiết bị
Trang 6- String getKeyName (int keyCode): Lấy tên của phím có giá trị mã phím là keyCode
- int getGameAction(int keyCode): Lấy một hành động game liên quan đến mã phím được nhấn
- void pointerDragged( int x, int y): được gọi khi rê chuột đến tọa độ x, y mới
- void pointerPressed ( int x, int y) : được gọi khi nhấn chuột tới tọa độ x, y
- void pointerReleased ( int x, int y): được gọi khi thả chuột tới tọa độ x, y
I.2.4 Lớp Graphics:
Đốii tượng Graphics có thể được sử dụng để vẽ: hình vuông, hình chữ nhật, cung tròn, đường thẳng, ký tự, ảnh, văn bản trên đối tượng Canvas
Các phương thức:
- void setColor(int red, int green, int blue)
- void drawArc(…): vẽ cung tròn
- void drawRect(…): vẽ hình chữ nhật
- void drawString(…): Vẽ chuỗi
- void drawImage(…): vẽ ảnh
I.2.5 Lập trình Bluetooth:
Kĩ thuật bluetooth được dùng để truyền thông giữa điện thọai di động với điện thoại
di động, hoặc giữa điện thoại di động và máy tính
Có 3 phương thức truyền thông được cài đặt trong kĩ thuật bluetooth:
- OBEX - Object Exchange: dùng để chuyển dữ liệu dùng file, hình ảnh
- L2CAP- Logical Link Control and Adaptation Protocol: Dùng chuyển các gói dữ liệu giữa client và server
- RFCOMM- Radio Frequency COMMunication: Dùng để chuyển các luồng dữ liệu đơn giản
Sun Java cung cấp thư viện hàm API bluetooth: Bluetooth JSR82 API package và bao gồm tất cả
các phương thức truyền thông nói trên
một ứng dụng bluetooth bao gồm hai phần: server dùng để tạo dịch vụ bluetooth và phần client
kết nối đến server và thực hiện truyền thông
II Thư viện lập trình đa phương tiện trong J2ME:
Trang 7
Thư viện lập trình đa phương tiện J2ME hỗ trợ các khả năng như âm thanh hay
\video cho ứng dụng trên thiết bị di động dựa trên nền tảng MIDP
Thư viện lập trình đa phương tiện J2ME (MMAPI - Mobile Media API) là một gói thư viện tùy chọn hỗ trợ các khả năng đa phương tiện như âm thanh hay video cho ứng dụng trên thiết bị di động dựa trên nền tảng MIDP Bài viết này sẽ trình bày kiến trúc kỹ thuật của MMAPI cũng như các ví dụ thực tế để bạn đọc có thể thử các khả năng của thư viện này
Tổng quan về MMAPI
Thư viện MMAPI được thiết kế để có thể chạy trên bất kỳ máy ảo nào dựa trên J2ME, bao gồm các máy ảo hỗ trợ CLDC (thường trên các điện thoại di động) hay CDC (trên các máy trợ giúp số cá nhân PDA hay smartphone) Bộ công cụ lập trình JaUmi của Samsung hỗ trợ lập trình cũng như kiểm tra các tính năng của thư viện MMAPI
MMAPI được thiết kế với những đặc tính sau:
– Hỗ trợ phát lại (playback) và ghi lại (recording) các tập tin đa phương tiện, hỗ trợ định dạng âm thanh hay hình ảnh bất kỳ.– Sử dụng ít tài nguyên của hệ thống, chạy được với những cấu hình rất thấp của các thiết bị dựa trên CLDC như ĐTDĐ – Không phân biệt nghi thức cũng như định dạng
– Khả năng chỉ sử dụng một số tính năng: các lập trình viên có thể giới hạn những tính năng trong chương trình, ví dụ như chỉ hỗ trợ tính năng âm thanh cơ bản hay chỉ
hỗ trợ một vài định dạng nào đó
– Khả năng mở rộng: những khả năng mới có thể được thêm vào mà không được làm ảnh hưởng đến các tính năng trước đó Một số ví dụ như khả năng mở rộng thêm các định dạng tập tin hay khả năng bổ sung các lớp điều khiển cho từng định dạng
javax.microedition.media Manager
Điểm bắt đầu để nhận các đối tương Player để xử lý các tập tin đa phương tiện
xử lý các giao thức bằng cách che đi chi tiết cách nhận dữ liệu, ví dụ như từ một tập tin hay từ máy chủ Đối tượng
Trang 8
Player sử dụng những phương thức của lớp này để nhận các dữ liệu nhập
– Khả năng tùy chọn cho các nhà sản xuất thiết bị: mặc dù thư viện này cung cấp các tính năng cho nhiều mục đích khác nhau nhưng nó phải cho phép các nhà sản xuất bỏ qua một số tính năng nếu như thiết bị của họ không hỗ trợ
Việc xử lý tập tin đa phương tiện bao gồm 2 thành phần:
– Xử lý giao thức truyền: đọc dữ liệu từ một nguồn như tập tin hay máy chủ để chuyển đến bộ phận xử lý nội dung
– Xử lý nội dung: giải mã dữ liệu và xuất nó ra một thiết bị xuất như loa hay màn hình video
– Để dễ dàng lập trình 2 bộ phận xử lý trên, MMAPI cung cấp cho lập trình viên
2 kiểu đối tượng cấp cao:
– DataSource: trừu tượng hoá phần xử lý giao thức bằng cách che đi cách đọc
dữ liệu từ một nguồn nào đó
– Player: lớp này đọc dữ liệu từ DataSource, xử lý và xuất ra Lớp này cung cấp các phương thức để điều khiển việc phát lại các tập tin âm thanh và hình ảnh MMAPI còn cung cấp một đối tượng thứ ba là Manager hoạt động theo cơ chế
“factory pattern” cho phép lập trình viên tạo ra các đối tượng Player từ các đối tượng DataSource hoặc InputStream
Chu kỳ sống của đối tượng Player gồm có 5 trạng thái sau: UNREALIZED, REALIZED, PREFETCHED, STARTED, và CLOSED Sáu phương thức sau được dùng để thay đổi trạng thái của đối tượng Player: realize(), prefetch(), start(), stop(), deallocate(), close()
Khi một đối tượng Player được tạo ra thì đầu tiên nó sẽ ở trạng thái UNREALIZED Khi gọi phương thức realize() thì đối tượng này sẽ chuyển sang trạng thái REALIZED và khởi động những thông tin cần thiết để có thể nhận về nội dung tập tin Gọi prefetch() sẽ chuyển trạng thái sang PREFETCHED, ở trạng thái này đối tượng Player sẽ tạo kết nối đến dữ liệu và thực thi những tác vụ khởi động khác Khi chúng ta gọi start() thì đối tượng sẽ bắt đầu xử lý dữ liệu và trạng thái được chuyển thành STARTED Khi toàn bộ nội dung đã được phát lại xong thì đối tượng Player
sẽ được chuyển về trạng thái PREFETCHED Gọi phương thức close() sẽ chuyển trạng thái thành CLOSED
Một đối tượng Player cung cấp những điều khiển cho kiểu dữ liệu nó đang xử lý Các bạn có thể sử dụng phương thức getControl() để nhận về một đối tượng Control hoặc gọi getControls() để nhận về một mảng các Control Ví dụ như bạn đang phát lại một tập tin theo định dạng MIDI và gọi phương thức getControl() thì bạn sẽ nhận
về một đối tượng MIDIControl
MMAPI bao gồm 3 gói sau:
Trang 9javax.microedition.media cung cấp một số giao tiếp (interface), một lớp ngoại lệ MediaException và đặc biệt là lớp Manager, đây chính là nơi bắt đầu để nhận về các đối tượng Player
javax.microedition.media.control định nghĩa những điều khiển cụ thể có thể được sử dụng với đối tượng Player như VolumeControl, VideoControl, và các điều khiển khác
javax.microedition.media.protocol định nghĩa những giao thức cho việc xử lý các điều khiển tuỳ biến, ví dụ như lớp DataSource là một lớp trừu tượng để xử lý nội dung của các tài nguyên
Những lớp, giao tiếp và ngoại lệ trong các gói trên được mô tả trong bảng 1, 2 và 3
Phương thức Manager.playTone() sẽ phát sinh các tông nhạc Thường thì các nhà sản xuất sẽ hỗ trợ bằng cách sử dụng bộ phát sinh tông nhạc của phần cứng Bạn chỉ việc xác định nốt nhạc, khoảng thời gian và âm lượng
Trang 10// Nhận điều khiển âm thanh và đặt âm lượng lên tối đa
Trang 11
javax.microedition.media Controllable
Cung cấp một giao tiếp
để nhận về các đối tượng Control từ một đối tượng Player hoặc
từ các đối tượng khác
javax.microedition.media Player
Dùng để điều khiển việc phát lại các tập tin
đa phương tiện Đối tượng này cung cấp những phương thức
để quản lý chu kỳ sống của Player
javax.microedition.media PlayerListener
Dùng để nhận các sự kiện phát sinh từ đối tượng Player
javax.microedition.media TimeBase
Một nguồn liên tục các nhịp thời gian, dùng để
đo thời gian cho việc đồng bộ hoá việc phát lại nhiều Player cùng lúc
javax.microedition.media.control FramePositionControl
Điều khiển vị trí chính xác của các khung hình video
javax.microedition.media.control GUIControl
Nếu các điều khiển hỗ trợ giao tiếp đồ họa thì cần cung cấp phần hiện thực cho giao tiếp này
javax.microedition.media.control MetaDataControl
Dùng để nhận các thông tin về tập tin đa phương tiện
javax.microedition.media.control RateControl Điều khiển tốc độ phát
lại của Player javax.microedition.media.control RecordControl Điều khiển việc ghi lại javax.microedition.media.control StopTimeControl Xác định điểm dừng
khi phát lại javax.microedition.media.control TempoControl Điều khiển nhịp độ
phát lại
javax.microedition.media.control ToneControl
Cho phép phát lại một chuỗi các tông nhạc do người dùng định nghĩa
Trang 12
javax.microedition.media.control VideoControl
Điều khiển việc hiển thị video, ví dụ như vị trí tương đối so với Canvas
Lớp Manager cũng hỗ trợ phương thức Manager.createPlayer() với tham số InputStream nên bạn có thể phát lại nhạc từ Record Management System (RMS), hoặc từ trong tập tin JAR Đây là ví dụ cách lấy InputStream từ RMS và phát lại đoạn nhạc lưu trong đó:
Bảng 3: NGOẠI LỆ (EXCEPTION) CỦA MMAPI
Gói Ngoại lệ Mô tả
Trang 13javax.microedition.media MediaException
Dùng để báo một lỗi không mong đợi trong các phương thức xử lý đa phương tiện
Bảng 4: Những kiểu nội dung (content type) được điện thoại Samsung E730 hỗ trợ
Kiểu nội dung Giải thích
audio/midi Tập tin nhạc theo định dạng MIDI
audio/x-smaf Tập tin nhạc theo định dạng SMAF , là tập tin có phần mở
rộng mmf của Samsung
audio/x-wav Tập tin nhạc theo định dạng WAVE
audio/x-tone-seq Chuỗi tông nhạc
audio/mpeg Tập tin nhạc theo định dạng MP3
video/3gp Tập tin video theo định dạng 3GP
resource Giao thức lấy dữ liệu từ tài nguyên hệ thống
file Giao thức lấy dữ liệu từ tập tin
Bảng 6: Giá trị các thuộc tính của điện thoại Samsung E730
Thuộc tính hệ thống Giá trị trong
supports.audio.capture false Không hỗ trợ thu âm thanh
supports.video.capture false Không hỗ trợ chụp hình
supports.recording false Không hỗ trợ thu lại video
audio.encodings null Không hỗ trợ thu âm thanh
video.encodings null Không hỗ trợ chụp hình
video.snapshot.encodings null Không hỗ trợ chụp hình
streamable.contents null Không hỗ trợ phát lại từ dữ liệu
dòng (streaming)
Trang 14Phát lại tập tin video mpeg Đoạn mã sau minh hoạ cách phát lại một tập tin video theo định dạng mpeg:
Lấy thông số hỗ trợ kiểu nội dung và giao thức của điện thoại
Đoạn mã sau minh hoạ cách lấy thông số về những hỗ trợ kiểu nội dung (content type) và giao
thức (protocol) được điện thoại hỗ trợ:
String[] contentTypesArray = Manager.getSupportedContentTypes(null);
for (int i = 0; i < contentTypesArray.length; i++) {
System.out.println(“Content Type “ + contentTypesArray[i]);
}
String[] protocolsArray = Manager.getSupportedProtocols(null);
for (int i = 0; i < protocolsArray.length; i++) {
System.out.println(“Protocol “ + protocolsArray[i]);
}
Lấy các thuộc tính hệ thống được định nghĩa trong MMAPI
Đoạn mã sau minh hoạ cách lấy các thuộc tính hệ thống để kiểm tra khả năng hỗ trợ
xử lý đa
phương tiện của điện thoại:
Trang 15
Bảng 7: So sánh MMAPI 1.0, MMAPI 1.1, MIDP 2.0 Media API và Thư viện bổ sung cho đa phương tiện
tả là JSR 135, được thiết kế với khả năng mềm dẻo để có thể
mở rộng và không phụ thuộc vào thiết bị cũng như nền tảng MMAPI không phụ thuộc vào bất kỳ định dạng lưu trữ, giao thức truyền dữ liệu hoặc những khả năng của các thiết bị phần cứng