package org.javavietnam.j2me.samsungdemo; import javax.microedition.lcdui.*;.[r]
Trang 1Phá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ứ ề ể
Trang 2là 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:ạ ạ ạ
Trang 3package org.javavietnam.j2me.samsungdemo; import javax.microedition.lcdui.*;
Trang 4import 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")) {
Trang 5filename = "/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 {
Trang 6ki 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);
Trang 7public 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 ạ http://sf.net/projects/javavietnam và b n có th download t iạ ể ạ
http://www.javavietnam.org/javavn/tutorial/j2me/SamsungDemo.zip
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ế ạ ệ ạ ạ ể ả ề ạ ử ạ
http://www.javavietnam.org/javavn/wap/game.wml