Phát triển ứng dụng J2ME sử dụng các tính năng mở rộng của điện thoại Samsung
Tóm tắt:
Bài viết này trình bày cách lập trình sử dụng các tính năng riêng của các điện thoại Samsung để xây dựng các ứng dụng chạy trên các điện thoại này.
Nội Dung
Đặc tả MIDP được xây dựng để phát triển các ứng dụng cho điện thoại di động (ĐTDĐ) có thể tương thích
với các điện thoại của các hãng sản xuất khác nhau. Tuy nhiên do đặc tả MIDP 1.0 còn một số giới hạn, đa
số các hãng sản xuất ĐTDĐ đều cung cấp các thư viện API bổ sung để mở rộng thêm khả năng của các
ứng dụng chạy trên các loại điện thoại này. Vì vậy nếu bạn viết ứng dụng trên ĐTDĐ Samsung, bạn nên tận
dụng hết các tính năng mà điện thoại cung cấp cho bạn. Nếu game của bạn có sử dụng các tính năng của
điện thoại Samsung, game của bạn sẽ hấp dẫn hơn và bạn sẽ được thêm điểm trong cuộc thi Mobile
Games 2004. Tuy nhiên bạn cũng chú ý rằng một khi bạn sử dụng các tính năng riêng của điện thoại
Samsung, ứng dụng của bạn sẽ không chạy trên ĐTDĐ của các hãng khác.
Các đời điện thoại Samsung thường cung cấp các thư viện API bao gồm AudioClip để chơi nhạc, Vibration
để tạo độ rung cho điện thoại, LCDLight để bật tắt màn hình điện thoại và cuối cùng là SMS giúp bạn có thể
lập trình gửi các tin nhắn SMS.
13 trang |
Chia sẻ: tlsuongmuoi | Lượt xem: 2103 | Lượt tải: 0
Bạn đang xem nội dung tài liệu Phát triển ứng dụng J2ME sử dụng các tính năng mở rộng của điện thoại Samsung, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Phát triển ứng dụng J2ME sử dụng các tính năng mở rộng của điện thoại
Samsung
Tóm tắt: Bài viết này trình bày cách lập trình sử dụng các tính
năng riêng của các điện thoại Samsung để xây dựng các ứng
dụng chạy trên các điện thoại này.
Đặc tả MIDP được xây dựng để phát triển các ứng dụng cho điện thoại di động (ĐTDĐ) có thể tương thích
với các điện thoại của các hãng sản xuất khác nhau. Tuy nhiên do đặc tả MIDP 1.0 còn một số giới hạn, đa
số các hãng sản xuất ĐTDĐ đều cung cấp các thư viện API bổ sung để mở rộng thêm khả năng của các
ứng dụng chạy trên các loại điện thoại này. Vì vậy nếu bạn viết ứng dụng trên ĐTDĐ Samsung, bạn nên tận
dụng hết các tính năng mà điện thoại cung cấp cho bạn. Nếu game của bạn có sử dụng các tính năng của
điện thoại Samsung, game của bạn sẽ hấp dẫn hơn và bạn sẽ được thêm điểm trong cuộc thi Mobile
Games 2004. Tuy nhiên bạn cũng chú ý rằng một khi bạn sử dụng các tính năng riêng của điện thoại
Samsung, ứng dụng của bạn sẽ không chạy trên ĐTDĐ của các hãng khác.
Các đời điện thoại Samsung thường cung cấp các thư viện API bao gồm AudioClip để chơi nhạc, Vibration
để tạo độ rung cho điện thoại, LCDLight để bật tắt màn hình điện thoại và cuối cùng là SMS giúp bạn có thể
lập trình gửi các tin nhắn SMS.
1. Chơi nhạc với AudioClip
Có lẽ âm thanh là một tính năng không thể thiếu được của các game, không chỉ các game trên máy để bàn
mà còn cả cho các game chạy trên ĐTDĐ. Samsung cung cấp cho bạn lớp com.samsung.util.AudioClip để
bạn có thể lập trình âm thanh cho các ứng dụng MIDP. Hiện nay điện thoại Samsung chỉ hỗ trợ kiểu định
dạng .mmf (TYPE_MMF = 1). Để tạo đối tượng AudioClip, bạn dùng constructor sau:
public AudioClip(int type,
java.lang.String filename)
throws java.io.IOException
trong đó type luôn luôn bằng 1 (kiểu định dạng .mmf) và filename là tên tập tin .mmf. Để tạo tập tin mmf từ
tập tin .midi, bạn hãy dùng chương trình PsmPlayer có trong CD của BTC (bài hướng dẫn sử dụng
PsmPlayer được đăng kèm theo trong số báo này). Để kiểm tra điện thoại Samsung của bạn có hỗ trợ âm
thanh hay không, bạn dùng phương thức tĩnh (static) AudioClip.isSupported(). AudioClip hỗ trợ 4 phương
thức điều kiển là play() để chơi nhạc, stop() để dừng chơi, pause() giúp bạn tạm dừng và resume() cho
phép bạn chơi tiếp đoạn nhạc đã được tạm dừng trước đó. Bạn chú ý là trong mỗi thời điểm chỉ có tối đa
một đối tượng AudioClip chơi nhạc và đó là đối tượng được gọi play() sau cùng. Đoạn chương trình sau
đây minh hoạ cách dùng AudioClip để chơi 3 file âm thanh .mmf, trong đó cũng minh hoạ cách xây dựng
giao diện để bảo đảm tính logic, ví dụ như chỉ cho phép gọi play() khi đang stop, hoặc cho phép resume()
chỉ sau khi bạn đã gọi pause() trước đó. Các bạn xem thêm hình minh hoạ khi chạy trong emulator cho
X100:
package org.javavietnam.j2me.samsungdemo;
import javax.microedition.lcdui.*;
import com.samsung.util.AudioClip;
/**
* Demo AudioClip
* @author Minh Nguyen
*/
public class AudioDemoForm extends List implements CommandListener {
private Command cmdBack = new Command("Back", Command.BACK, 1);
private Command cmdStart = new Command("Start", Command.SCREEN, 1);
private Command cmdStop = new Command("Stop", Command.SCREEN, 1);
private Command cmdPause = new Command("Pause", Command.SCREEN, 1);
private Command cmdResume = new Command("Resume", Command.SCREEN, 1);
private AudioClip audioClip = null;
public AudioDemoForm() {
super("Audio Demo", List.IMPLICIT);
append("Joy", null);
append("One Stop", null);
append("Nguoi ta noi", null);
setCommandListener(this);
addCommand(cmdBack);
addCommand(cmdStart);
}
public void commandAction(Command command, Displayable displayable) {
if (command == cmdBack) {
stopAudioClip();
Display.getDisplay(SamsungDemoMIDlet.instance).setCurrent(new MainForm());
} else if (command == cmdStart) {
int currentIndex = getSelectedIndex();
String currentString = getString(currentIndex);
String filename = null;
if (currentString.equals("Joy")) {
filename = "/joy.mmf";
} else if (currentString.equals("Nguoi ta noi")) {
filename = "/nguoitanoi.mmf";
} else if (currentString.equals("One Stop")) {
filename = "/onestop.mmf";
}
playAudioClip(filename);
} else if (command == cmdStop) {
stopAudioClip();
} else if (command == cmdPause) {
pauseAudioClip();
} else if (command == cmdResume) {
resumeAudioClip();
}
}
public void playAudioClip(String filename) {
stopAudioClip();
try {
audioClip = new AudioClip(1, filename);
audioClip.play(10, 5);// loop 10 times with maximum volume (5)
addCommand(cmdStop);
addCommand(cmdPause);
removeCommand(cmdResume);
} catch (Exception e) {
e.printStackTrace();
}
}
public void stopAudioClip() {
if (audioClip != null) {
try {
audioClip.stop();
audioClip = null;
removeCommand(cmdStop);
removeCommand(cmdPause);
removeCommand(cmdResume);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void pauseAudioClip() {
if (audioClip != null) {
try {
audioClip.pause();
addCommand(cmdResume);
addCommand(cmdStop);
removeCommand(cmdPause);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void resumeAudioClip() {
if (audioClip != null) {
try {
audioClip.resume();
addCommand(cmdPause);
addCommand(cmdStop);
removeCommand(cmdResume);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
2. Cảm nhận rung với Vibration
Một trong những tính năng bạn có thể đưa vào game là tính năng rung của điện thoại. Rung là một tính
năng đặc trưng của điện thoại và bạn sẽ không gặp tính năng này trong các game trên máy tính để bàn.
Samsung cho phép bạn bật chế độ rung của điện thoại với lớp com.samsung.util.Vibration. Để kiểm tra xem
điện thoại có hỗ trợ rung hay không, bạn gọi phương thức tĩnh (static method) Vibration.isSupported(). Lớp
Vibration cũng cung cấp cho bạn 2 phương thức tĩnh (static method) Vibration.start() để bật rung và
Vibration.stop() để tắt rung. Phương thức start() gồm 2 tham số như sau:
public static void start(int duration,
int strength)
trong đó duration là số giây sẽ rung, phải là một giá trị dương và strength chỉ cường độ rung, có giá trị từ 1
đến 5. Tuy nhiên hiện nay giá trị strength này bị bỏ qua, nghĩa là chỉ có duy nhất một cường độ rung. Sau
đây là đoạn chương trình minh hoạ tính năng rung trên điện thoại Samsung và hình chụp lúc chạy với bộ
emulator cho E100, trong đó bạn chú ý icon trên cùng bên trái sáng lên báo hiệu đang rung
package org.javavietnam.j2me.samsungdemo;
import javax.microedition.lcdui.*;
import com.samsung.util.Vibration;
/**
* Demo Vibration
* @author Minh Nguyen
*/
public class VibrationForm extends Form implements CommandListener {
private Command cmdBack = new Command("Back", Command.BACK, 1);
private Command cmdStart = new Command("Start", Command.SCREEN, 1);
private Command cmdStop = new Command("Stop", Command.SCREEN, 1);
Gauge gaugeDuration;
Gauge gaugeStrength;
public VibrationForm() {
super("Vibration Demo");
gaugeDuration = new Gauge("Vibration Duration", true, 10, 5);
this.append(gaugeDuration);
// strength is between 1 to 5 so we set gauge's maxValue = 4 (from 0 to 4)
gaugeStrength = new Gauge("Vibration Strength", true, 4, 4);
this.append(gaugeStrength);
setCommandListener(this);
addCommand(cmdBack);
addCommand(cmdStart);
addCommand(cmdStop);
}
public void commandAction(Command command, Displayable displayable) {
if (command == cmdBack) {
Display.getDisplay(SamsungDemoMIDlet.instance).setCurrent(new MainForm());
} else if (command == cmdStart) {
int duration = gaugeDuration.getValue();
int strength = gaugeStrength.getValue() + 1;
Vibration.start(duration, strength);
} else if (command == cmdStop) {
Vibration.stop();
}
}
}
3. Bật tắt đèn màn hình với LCDLight
Một tính năng nữa của Samsung cho phép bạn bật tắt màn hình ĐTDĐ với lớp com.samsung.util.LCDLight.
Tính năng này rất hữu dụng cho các game có thời gian chờ lâu (ví dụ như các game đánh cờ). Một số màn
hình điện thoại sẽ tự động tắt đèn màn hình sau một thời gian chờ kể từ khi nhấn phím cuối cùng (thường
là sau 15 giây), bạn có thể lập trình để sau khoảng thời gian chờ này, chương trình tự động bật sáng đèn
màn hình nhằm giúp người chơi dễ dàng theo dõi. Cũng giống như các tính năng khác, bạn gọi phương
thức tĩnh LCDLight.isSupported() để kiểm tra điện thoại của bạn có hỗ trợ tính năng này hay không. Để bật
sáng màn hình, bạn gọi phương thức tĩnh
public static void on(int duration)
trong đó duration là số giây bật sáng, phải là một số nguyên dương. Để tắt, bạn chỉ cần gọi method
LCDLight.off(). Đoạn chương trình sau có kèm hình minh hoạ tính năng đèn màn hình, bạn chú ý icon bên
trái, ở giữa có hình bóng đèn đang sáng lên.
package org.javavietnam.j2me.samsungdemo;
import javax.microedition.lcdui.*;
import com.samsung.util.LCDLight;
/**
* Demo LCDLight
* @author Minh Nguyen
*/
public class LCDLightForm extends Form implements CommandListener {
private Command cmdBack = new Command("Back", Command.BACK, 1);
private Command cmdOn = new Command("On", Command.SCREEN, 1);
private Command cmdOff = new Command("Off", Command.SCREEN, 1);
Gauge gaugeDuration;
public LCDLightForm() {
super("LCDLight Demo");
gaugeDuration = new Gauge("LCDLight Duration", true, 10, 5);
append(gaugeDuration);
setCommandListener(this);
addCommand(cmdBack);
addCommand(cmdOn);
addCommand(cmdOff);
}
public void commandAction(Command command, Displayable displayable) {
if (command == cmdBack) {
Display.getDisplay(SamsungDemoMIDlet.instance).setCurrent(new MainForm());
} else if (command == cmdOn) {
int duration = gaugeDuration.getValue();
LCDLight.on(duration);
} else if (command == cmdOff) {
LCDLight.off();
}
}
}
4. Nhắn tin với SMS
Tính năng cuối cùng cho phép bạn nhắn tin SMS, mặc dù tính năng này thường không được dùng khi viết
game, bạn cũng có thể tham khảo để viết các ứng dụng khác cho điện thoại. Để gửi SMS bạn tạo một biến
kiểu com.samsung.util.SM với constructor sau:
public SM(java.lang.String dest,
java.lang.String callback,
java.lang.String textMessage)
trong đó dest là địa chỉ đến, callback là địa chỉ callback và textMessage là nội dung tin nhắn. Sau khi có đối
tượng SM, bạn dùng phương thức tĩnh SMS.send(SM sm) để gửi tin nhắn đi. Bạn tham khảo đoạn chương
trình sau minh hoạ việc gửi tin nhắn với điện thoại Samsung
package org.javavietnam.j2me.samsungdemo;
import javax.microedition.lcdui.*;
import com.samsung.util.SM;
import com.samsung.util.SMS;
/**
* Demo SMS
* @author Minh Nguyen
*/
public class SMSForm extends Form implements CommandListener {
private Command cmdBack = new Command("Back", Command.BACK, 1);
private Command cmdSend = new Command("Send", Command.SCREEN, 1);
TextField textFieldDest;
TextField textFieldCallback;
TextField textFieldMsg;
public SMSForm() {
super("SMS Demo");
textFieldDest = new TextField("Destination", "", 15, TextField.ANY);
textFieldCallback = new TextField("Call back", "", 15, TextField.ANY);
textFieldMsg = new TextField("Message", "", 128, TextField.ANY);
this.append(textFieldDest);
this.append(textFieldCallback);
this.append(textFieldMsg);
setCommandListener(this);
addCommand(cmdBack);
addCommand(cmdSend);
}
public void commandAction(Command command, Displayable displayable) {
if (command == cmdBack) {
Display.getDisplay(SamsungDemoMIDlet.instance).setCurrent(new MainForm());
} else if (command == cmdSend) {
String dest = textFieldDest.getString();
String callback = textFieldCallback.getString();
String message = textFieldMsg.getString();
SM sm = new SM(dest, callback, message);
SMS.send(sm);
}
}
}
5. Kết luận
Bài viết này đã trình bày cách lập trình sử dụng các tính năng riêng biệt của điện thoại Samsung. Với những
kỹ thuật này, game của bạn sẽ hấp dẫn hơn và sẽ được chấm điểm cao hơn trong cuộc thi Mobile Games
2004 này.
Mã nguồn toàn bộ chương trình này được opensource với giấp phép công cộng GPL và đặt tại CVS của
JavaVietnam tại và bạn có thể download tại
Ngoài ra nếu bạn có điện thoại Samsung, bạn có thể tải về chạy thử tại
Các file đính kèm theo tài liệu này:
- Phát triển ứng dụng J2ME sử dụng các tính năng mở rộng của điện thoại Samsung.pdf