lv - ungdungjavachomobilefone
TRANSCRIPT
-
8/14/2019 LV - UngDungJavaChoMobileFone
1/24
n tt nghip ng dng Java cho in thoi ding
20
CHNG 2 HNG TIP CN
Khi lp trnh trn in thoi di ng, cn phi khai thc c cc th mnh ca
in thoi ngy nay l m thanh v hnh nh. Trong phn ny chng em s trnh bymt s k thut x l m thanh, mt s k thut x l ha v k thut x l phm
cng sc trnh by chi tit. Tt c cc k thut ny c th nghim thnh cng
trn cc in thoi ca cc hng in thoi ln nh Nokia, Samsung hay Sony
Ericssion.
2.1 X l hnh nh ho
2.1.1 Tm hiu cc i tng haNgy nay vi s pht trin nhanh chng ca cng ngh di ng, chic in
thoi di ng khng cn n gin nh trc y l c nhim v thoi m cn l
phng tin rt hu hiu trong cng vic v gii tr. V hnh nh, trc y mn
hnh in thoi di ng ch l mn hnh en trng nhng ngy nay mn hnh in
thoi l mn hnh mu v mt s loi in thoi mi c n vi trm ngn mu.
l nhng u im m gip in thoi di ng ngy cng thn thit vi ngi s
dng hn. Vi nhng u im , vy th lm sao xy dng cc ng dng gii tr
trn in thoi di ng hiu qu. Phn ny s trnh by nhng kha cnh cbn gip
cho vic khai thc cc im mnh v ho mt cch hiu qu hn.
Hu ht cc in thoi di ng ngy nay u s dng cng ngh Java. Th
mnh ca ngn ng ny l c th chy c trn cc platform khc nhau. xy
dng cc ng dng gii tr mnh v ho, mi trng MIDP 1.0 cung c p cho
chng ta hai mc ho cbn l ha mc thp v ho mc cao. ho
mc cao dng cho vn bn hay form. ho mc thp dng cho cc ng dng tr
chi yu cu phi v ln mn hnh.
-
8/14/2019 LV - UngDungJavaChoMobileFone
2/24
n tt nghip ng dng Java cho in thoi ding
21
Hnh sau biu din hai mc ho.
C hai lp ho mc th p v lp ha mc cao u l con ca lp
Displayable. Trong MIDP ch c mt lp Displayable c hin th ti mt
thi im, c thnh ngha nhiu mn hnh nhng ch hin th mt mn hnh.
Public abstract class Canvas extends Displayable
Public abstract class Screen extends Displayable
- ho mc cao: l lp con ca lp Screen. N cung cp cc thnh phn nh
Textbox, List, Form, Alert. Ta t iu khin vic sp xp cc thnh phn trnmn hnh. Vic sp xp ph thuc vo nh sn xut.
Textbox: Cho php ngi dng nh p v son tho vn bn. Ta c th nh
ngha s k t ti a, gii hn loi d liu nhp (s hc, mt khu, email,) v hiu
chnh ni dung textbox. Kch thc tht s ca textbox c th nh hn yu cu khi
chy trong thc t (do gii hn ca thit b). Kch thc tht s ca textbox c th
ly bng phng thc getMaxSize().
List: Cha danh sch cc la chn, ngi dng c th tng tc vi danh sch
v chn mt hay nhiu item. C 3 loi danh sch l: IMPLICIT, EXCLUSIVE v
MULTIPLE.
Alert: hin th mt mn hnh pop-up trong mt khong thi gian, n c dng
cnh bo hay thng bo li.Thi gian hin th c thuc thit lp bi ng dng
Displayable
Lp Canvas Lp Screen
ListTextbox AlertForm
Mc thp Mc cao
- Cc ng dnggame
- V ln mn hnh- Cc s kin nhn
phm- t tnh kh chuyn
- Cc ng dng doanh nghip- C tnh kh chuyn cao.- Khng iu khin cc thnh phn
-
8/14/2019 LV - UngDungJavaChoMobileFone
3/24
n tt nghip ng dng Java cho in thoi ding
22
hoc c thit l p l FOREVER cho n khi ngi dng nhn phm bt k
ng li.
Form: Cho php hin th nhiu item khc nhau trn mt mn hnh.
- ho mc thp: l lp con ca lp Canvas. Lp ny cung cp cc phng thc ha cho php v ln mn hnh cng vi cc phng thc x l s kin bn phm.
Lp ny dng cho cc ng dng tr chi cn iu khin nhiu vic v ln mn hnh.
Khi c mt ng dng i hi ha mnh chc chn ng dng phi s
dng cc lp ny. y l nhng lp ho cp thp chy c trn hu ht cc loi
in thoi di ng h trJava. Mt s th nghim vic ng dng cc hm ha
cp thp ca MIDP 1.0 xy dng cc ng dng yu cu kh nng ho cao cho
thy tc thc hin nhanh hn khi s dng MIDP 2.0.
2.1.2 K thut x l hot hnhMt trong nhng thnh phn khng km phn quan trng khi xy dng cc
ng dng mnh v ho l to cc hiu ng hot hnh. lm c iu ,
MIDP 1.0 cung cp cho ta cc i tng Timer, Thread, Runnable cho php thc
hin cc hiu ng theo chu k thi gian nh trc.
2.1.2.1Sdngi tng Timerto hot hnhTrong n, cc game s dng cc lp v ho biu din cc hnh nh v
s dng Timer cho vic lm chuyn ng cc i tng cng nh tnh thi gian.
Hot hnh thc cht l s lun phin thay i cc hnh theo mt khong thi gian
xc nh. Tu vo s lng hnh nh v khong thi gian m hiu ng s din ra
p hay khng p.
M t k thut x l hot hnh s dng i tng Timer.
Public class MainGame extends Canvas {
Public MainGame(){// Khi to Timer
tm = new Timer();
doAnimation tt = new doAnimation ();
-
8/14/2019 LV - UngDungJavaChoMobileFone
4/24
n tt nghip ng dng Java cho in thoi ding
23
tm.schedule(tt, 500,500); // Thit lp thi gian hot
hnh
}
Protected void paint(Graphics g){
// Cc thao tc v hnh nh
}
public class doAnimation extends TimerTask {
public final void run(){
// Cp nht hnh nh
repaint(); // v li mn hnh sau khi cp nht
}
}
}
Theo khong thi gian xc nh, hnh nh sc lp doAnimation cp nht
mi v phng thc repaint() sc gi cp nht li hnh nh trn thit b.
Phng thc repaint() s gi phng thc paint(Graphic g) v li mn
hnh theo cc tham s c c p nht trong phng thc run() ca lp
doAnamation.
2.1.2.2Sdng Threadto hot hnhMt hng khc khi to hiu ng hot hnh l ta c th dng thread nh
thi gian. Thread c lp java.lang.Thread cung cp, n c nhiu phng thc
nhng c phng thc quan trng m ta cn ch khi xy dng ng dng l start() .
Start() khi ng thread
K thut s dng thread c thc hin nh sau:
public class GameCanvas{
private final int DELAY = 100;
private GameThread thread;private boolean running;public GameCanvas(){}public void start(){
running = true;
-
8/14/2019 LV - UngDungJavaChoMobileFone
5/24
n tt nghip ng dng Java cho in thoi ding
24
thread = new GameThread();thread.start();
}public void stop(){
running = false;}public class GameThread extends Thread{
public void run(){
while (running){
// Cp nht hnh nh// Kim tra cc iu kin chuyn ng// v li hnh nhtry{
Thread.sleep(DELAY);
} catch (Exception ex) { }}
}}
}
Crunning cho bit thread c ang thc hin hay khng, thread s dng khi c
ny c gn bng false khi gi phng thc stop(). DELAY cho bit thi gian lp
li hnh ng ca thread.
2.1.2.3Sdng giao din Runnable to hot hnhCch khc to hot hnh l s dng giao din Runnable ca lpjava.lang.Runnable. Giao din ny c thit k cung c p nhng phng
thc thng dng cho nhng i tng hot hnh v n c k tha t lp Thread.
Giao din Runnable c mt phng thc duy nht l run(). Khi mt i tung s
dng giao din Runnable to thread, phng thc run()c gi thc thi
thread.
K thut s dng giao din Runnable c ci t nh sau:
public class GameCanvas implements Runnable{
private final int DELAY = 100;private Thread thread;private boolean running;public GameCanvas(){
-
8/14/2019 LV - UngDungJavaChoMobileFone
6/24
n tt nghip ng dng Java cho in thoi ding
25
}public void start(){
running = true;thread = new Thread(this);thread.start();
}public void stop(){
running = false;}public void run(){
while (running){
// Cp nht hnh nh// Kim tra tng thch// v li hnh nhtry
{Thread.sleep(DELAY);
} catch (Exception ex) { }}
}}
Do n c k tha t Thread nn cng c c running cho bit giao din c
ang thc thi hay khng, v n s ngng khi crunning c thit lp l false khi
phng thc stop() c gi.
Khi lp trnh x l hot hnh, chng ta nn cn nhc gia vic s dng Thread
v s dng Timer. Thread khng thch hp cho vic to cc hiu ng hot hnh theo
tng frame (frame-rate), cch tt nht i vi hot hnh dng ny l ta dng i
tng Timer v i tng ny khng s dng trc tip ng h h thng nn vic
thc hin hot hnh s hiu qu hn. Timer d s dng hn Thread nhng do ban
u Java cha h trlp Timer nn c mt s game s dng Thread thay th.
2.2 X l thao tc bn phmDo chng ta xy dng ng dng da trn giao din lp trnh cp thp nn ta cth d dng kim sot thao tc phm da trn i tng Canvas. Hu ht cc ng
dng J2ME u s dng Thread cho vic kim sot bn phm. Khi ngi dng nhn
-
8/14/2019 LV - UngDungJavaChoMobileFone
7/24
n tt nghip ng dng Java cho in thoi ding
26
mt phm trn in thoi, mt s kin c lp tc gi cho ng dng, ng dng s
nhn s kin, phn tch phm nhn v x l hnh ng tng ng.
i tng Canvas cung cp phng thc keyPressed (int keycode) x
l phm nhn, y l cch x l s kin bm phm.private int key;public void keyPressed(int keyCode){// X l hnh ng tng ngswitch (keyCode){case -1:
case 50: //Up or Number 2// Hnh ng khi nhn phm
break;
case -2:case 56: //down or Number 8break;
case -3:case 52: // Left or Number 4break;
case -4:case 54: // Nhn phm s 6 hoc phm Rightbreak;
case -5:case 53: // Nhn phm 5 hoc phm Select
break;}repaint(); // V li mn hnh sau khi nhn phm}
public void keyReleased(int keyCode){// t = 0 khi khng c phm no uc nhn.key = 0;}
Khi c s kin nhn phm, hm ny s kim tra v x l hnh ng tng ng.
Sau khi x l s gi phng thc repaint() cp nht li mn hnh thit b theohnh ng m ngi dng va thc hin.
-
8/14/2019 LV - UngDungJavaChoMobileFone
8/24
n tt nghip ng dng Java cho in thoi ding
27
2.3 nh gi u khuyt im ca vic s dng i tng ho cp thp
u im:
- Khai thc ti a th mnh v ho m cc loi in thoi di ng ngy nay
cung cp nh mu sc, hnh nh, hot hnh.
- Cho php can thip trc tip vo mn hnh hin th ca thit b, gip d dng
xy dng cc ng dng hot hnh.
- Cho php kim sot phm nhn d dng thng qua lp Canvas.
- Cho php ng dng thc hin vi tc nhanh v thao tc trc tip trn mn
hnh thit b m khng qua i tng trung gian no.
Khuyt im:
- Kh khn cho vic xy dng ng dng v phi s dng i tng ho cp
thp.
- Do tt c cc thao tc vu c lp Canvas x l nn phi c gii php
nhm gip cho lp ny thc hin thao tc v nhanh v hiu qu nht.
2.4 Mt s gii php khi x l ha- Ci tin tc v hnh nh trn mn hnh thit b: Do vic np nh t file
thng tn nhiu thi gian nn ta khng th va thc hin v hnh nh ln mn hnh
va c hnh nh t file, vic ny s lm hot hnh b git. Do chng ta cn phi
load hnh vo b nhmy trc khi thc hin thao tc v nh sau:
Load tt c cc hnh nh cn thit vo b nh my trong phng thc
constructor ca i tng s dng hnh nh mt ln.
Trong phng thc paint(), ta lun phin v cc hnh nh ny theo khong
thi gian xc nh.
iu ny s gip cho hot hnh khng b git, do hnh nh c np vo
trong b nhngay tu nhng s gy ra mt kh khn l ti nguyn h thng b
chim gi.
-
8/14/2019 LV - UngDungJavaChoMobileFone
9/24
n tt nghip ng dng Java cho in thoi ding
28
- V nhng phn hnh nh c thay i, khng v ht mn hnh: Khi thc hin
cc thao tc hot hnh ta nn v nhng phn hnh nh b thay i khng nn v li
ton b mn hnh.
- Thu dn ti nguyn h thng sau khi dng: Khi to ra cc i tng ho nhImage, h thng s khng tng thu dn ti nguyn m cc i tng ny chim
gi cho n khi kt thc ng dng. iu ny s lm tn ti nguyn ca h thng.
J2ME cho php chng ta thu dn ti nguyn h thng bng tay bng cch gi
System.gc(). Nhng trc khi gi phng thc ny cc i tng bn mun thu
hi ti nguyn phi c gn bng null.
C mt ch l ta nn gii phng ht ti nguyn trc khi chuyn sang thc
hin thao tc k tip.
void freeMemory() {
img1 = null;
img2 = null;
img3 = null;
System.gc(); //Call Garbage Collector
}
Khng nn thc hin theo cch sau:
void loadData() {
try {
img1 = null;
img1 = Image.createImage("img1.png");
img2 = null;
img2 = Image.createImage("img2.png");
img3 = null;
img3 = Image.createImage("img3.png");
} catch (...) {}
}
-
8/14/2019 LV - UngDungJavaChoMobileFone
10/24
n tt nghip ng dng Java cho in thoi ding
29
V mt c php th khng c g sai, nhng v mt thc thi, do my in thoi
c tc th p nn trnh Garbage Collector khng th thc hin vic xo b nh
ngay lp tc, n cn mt khong thi gian nht nh. Chnh v th bn nn dng
theo cch ca method "freeMemory()".
2.5 X l m thanh trong ng dng
2.5.1 Vn h tr m thanh trn in thoi di ng.Mt kh khn rt ln khi l p trnh cc ng dng trn in thoi di ng s
dng MIDP 1.0 l phn x l m thanh. Do MIDP 1.0 khng h trvic x l m
thanh nn cc nh sn xut phi cung cp thm cc hm API chuyn dng cho vic
ny. y l mt c gng ca nh sn xut ci tin cht lng cc in thoi tuy
nhin n li gy kh khn cho cc lp trnh vin khi xy dng cc ng dng. Do
phi ph thuc vo cc API ca nh sn xut cung cp nn tnh cht Vit mt ln
Chy trn nhiu nn khng cn ng na. iu ny c SUN c gng khc
phc trong phin bn MIDP 2.0, nhng hin nay ch c mt s t in thoi h tr
phin bn ny. Trong phn ny chng em s trnh by mt s gii php khi x l m
thanh cho cc ng dng trn in thoi di ng.
Bng m t mt s API ca mt s nh sn xut in thoi di ng cung cp
cho vic x l m thanh.
STT Nh cung cp Tn gi
1 Nokia com.nokia.mid.sound.*;
2 Samsung com.samsung.util.AudioClip;
3 Sony Ericssion javax.microedition.media.*;
javax.microedition.media.control.*; (gi
ca SUN)
2.5.1.1i viin thoi Nokia:Hin nay Nokia c rt nhiu dng sn phm nhng ta c th phn thnh hai
nhm chnh sau: nhm thuc Series 40 v nhm thuc series 60. Nhm thuc Series
40 gm mt s loi sau: 7210,6610, 7250, 6800, 3300,3200,3100, s dng cng
-
8/14/2019 LV - UngDungJavaChoMobileFone
11/24
n tt nghip ng dng Java cho in thoi ding
30
ngh MIDP 1.0. Nhm thuc Series 60 nh: 6600,7610, 3650, 3660,.. nhm ny s
dng cng ngh MIDP 2.0. Do hin nay s dng sn phm h trMIDP 2.0 tng
i t nn chng em vit ng dng da trn MIDP 1.0. Do MIDP 1.0 khng h tr
m thanh nn s dng c m thanh, hng Nokia cung cp mt s API chuyndng cho vic ny. Cc API m nh sn xut Nokia cung cp ch h trcho vic
pht cc m thanh dng TONE, dng WAV. TONE c lu tr theo dng mng
cc byte biu din cho tn s Node nhc nh v d sau:
byte[] dataIntro = {
// Thit lp thng s cho Tone
(byte)0x02, (byte)0x4a, (byte)0x3a, (byte)0x40,
(byte)0x04, (byte)0x00, (byte)0x19, (byte)0x2a,
(byte)0xa2, (byte)0x34, (byte)0x49, (byte)0xaa,(byte)0x17, (byte)0xa1, (byte)0x6a, (byte)0x12,
(byte)0xa1, (byte)0x1a, (byte)0x20, (byte)0xd5,
(byte)0x0b, (byte)0x50, (byte)0x00
};
hoc c lu tr trong file .ott (v d amnhac.ott). Dng WAV do kch thc qu
ln khng ph hp vi vic lp trnh trn in thoi di ng nn chng em khng
trnh by trong phn ny.
Cch pht m thanh dng TONE:
private Sound introSnd=null;
introSnd=new Sound(dataIntro, Sound.FORMAT_TONE);
introSnd.setGain(254);
public void playIntroduction(){
stopAllSound();
introSnd.play(1);
}
public void stopAllSound(){
introSnd.stop();
}
-
8/14/2019 LV - UngDungJavaChoMobileFone
12/24
n tt nghip ng dng Java cho in thoi ding
31
C mt kh khn khi s dng cch pht m thanh dng ny l ta khng th
pht song song nhiu hiu ng m thanh cng mt lc c. y l mt trong
nhng nhc im ca MIDP 1.0, n gy kh khn cho vic to cc hiu ng m
thanh cho ng dng. Hin nay cc loi Nokia s dng MIDP 1.0 khng cung cpcc API phc v cho vic chi cc tp tin MIDI mc d l mt sin thoi Nokia
h trchi nhc MIDI.
Cch kim tra in thoi c h tr chi m thanh khng: dng phng
thc className tm gi com.nokia.mid.soung.Sound, nu tm thy tc l in
thoi c h trchi m thanh.
private static TonePlayer makeTonePlayer() {TonePlayer player;try {
Class.forName("com.nokia.mid.sound.Sound");// To lp chi m thanhClass class = Class.forName("example.tones.NokiaTonePlayer");
player = (TonePlayer)(clas.newInstance());
} catch (Exception e) {System.out.print( Khng h tr m thanh.);
}return player;
}
Lp chi m thanh trn Nokia.Package example.tones;
import com.nokia.mid.sound.*; // import gi chi m thanhclass NokiaTonePlayer extends TonePlayer {
private final Sound sound; NokiaTonePlayer() {sound = new Sound(0, 1L);
}
void play(int frequency) {sound.init(frequency, 2000L);sound.play(1);
}
void stop() {sound.stop();
}}
-
8/14/2019 LV - UngDungJavaChoMobileFone
13/24
n tt nghip ng dng Java cho in thoi ding
32
V khng th pht cng lc nhiu knh m thanh nn trong ch chn mt trong
hai cch sau: mt l s dng m thanh cho cc hiu ng, hai l s dng m thanh
lm nhc nn m khng c m thanh cho phn hiu ng.
2.5.1.2i viin thoi SAMSUNG:Cc dng sn phm ca SAMSUNG s dng MIDP 1.0 v MIDP 2.0 iu
c cung cp lp com.samsung.util.AudioClip lp trnh m thanh. Hin nay
in thoi SAMSUNG ch h trm thanh dng .mmf (TYPE_MMF=1). to i
tng AudioClip, ta dng Constructor sau:
Public AudioClip(int type, String filename) throws java.io.IOException
Trong type lun lun bng 1 (kiu nh dng .mmf) v filename l tn tp
tin mmf. Tp tin mmf tht cht l tp tin MIDI c bit c SAMSUNG s dngcho dng sn phm ca h.
kim tra in thoi c h tr m thanh khng, ta dng phng thc tnh
AudioClip.isSupported(). AudioClip cn h tr 4 phng thc iu khin l
play() chi nhc, stop() dng nhc, pause() tm dng v resume() chi tip
on nhc tm dng trc . SAMSUNG cng tng t nh Nokia l mi
thi im ch c mt i tng AudioClip chi nhc v l i tng c gi l
play() sau cng.
Cch chi nhc c SAMSUNG xy dng nh sau:
import com.samsung.util.AudioClip;private AudioClip audioClip=null;
public void playAudioClip(String filename){stopAudioClip();try{
audioClip=new AudioClip(1,filename); // to lpAudioClip
audioClip.play(10,1); // Play 10 ln, Loop time = 1} catch (Exception e){
e.printStackTrace();}
}
public void stopAudioClip(){if (audioClip!=null){
try{audioClip.stop();
-
8/14/2019 LV - UngDungJavaChoMobileFone
14/24
n tt nghip ng dng Java cho in thoi ding
33
audioClip=null;}catch (Exception e){e.printStackTrace();
}}
}
public void pauseAudioClip(){if (audioClip != null) {
try {audioClip.pause();
}catch (Exception e) {e.printStackTrace();
}}
}
public void resumeAudioClip(){
if (audioClip!=null){try{audioClip.resume();
}catch (Exception e){e.printStackTrace();
}}
}
2.5.1.3i viin thoi SONY ERICSSION:Vi in thoi Ericssion th vic lp trnh m thanh tng i d dng hn cc
loi Nokia hay SAMSUNG. Do cc loi in thoi Ericssion m h trJava iu s
dng gi API v m thanh ca SUN. Gi ny h trchi rt nhiu loi m thanh
c m t trong bng sau:
1.Wave audio files: audio/x-wav2.AU audio files: audio/basic3.MP3 audio files: audio/mpeg4.MIDI files: audio/midi5.Tone sequences: audio/x-tone-seq
Khc vi cc loi in thoi khc, Ericssion c th chi cng lc nhiu mthanh khc nhau nh c th va chi WAV va chi TONE, MIDI v TONE.
Ericssion c gng tn dng li th ny lm cho cc sn phm ca mnh ngy
cng thn thin vi ngi dng hn. Ericssion cung cp lp Manager dng qun
-
8/14/2019 LV - UngDungJavaChoMobileFone
15/24
n tt nghip ng dng Java cho in thoi ding
34
l ti nguyn cho vic chi m thanh ca i tng Player. i tng Player cho
php thc hin v kim sot qu trnh chi nhc.
V d sau minh ha cch dng i tng Player v l p Manager chi tone
sequence.try {
Player p =Manager.createPlayer(Manager.TONE_DEVICE_LOCATOR);
p.realize();ToneControl tc =
(ToneControl)p.getControl("ToneControl");tc.setSequence(mySequence);p.start();
} catch (IOException ioe) {} catch (MediaException me) {}
Do khng c nhiu thi gian tm hiu nn chng em ch tm hiu c 3 loi
in thoi l Nokia, SAMSUNG v SONY Ericssion. Mt s khc nh Motorola,
LG, Siemen nu c iu kin chng em s tm hiu sau.
2.5.2 Nhng kh khn v hng gii quyt khi x l m thanhTa thy rng qua tm hiu ba loi in thoi khc nhau l Nokia, Samsung,
Ericssion s dng MIDP 1.0, cch lp trnh x l m thanh l khc nhau. Mt s
kh khn m chng ta thy khi lp trnh m thanh cho cc loi in thoi di ng l:
- MIDP 1.0 khng h trm thanh nn khng c mt chun c th no
cho vic l p trnh m thanh trn cc dng in thoi di ng khc
nhau.
- Mi nh sn xut iu cung cp cc API ring cho tng sn phm ca
h.
- m thanh m mi nh sn xut dng cho in thoi ca h cng khc
nhau.
Vy lm sao khi vit mt ng dng c th chy c trn cc dng snphm khc m khng cn phi vit nhiu ln cho nhiu dng sn phm khc nhau ?
Cch gii quyt nh sau:
-
8/14/2019 LV - UngDungJavaChoMobileFone
16/24
n tt nghip ng dng Java cho in thoi ding
35
- To lp tru tng cho vic x l m thanh chung, gm cc phng
thc chnh c th chi nhc.
- To cc lp chi m thanh ng vi cc dng sn phm tng ng k
tha t lp tru tng.- Dng className tm mt s lp c trng ca tng sn phm, nu
tm thy th xc nh c sn phm thuc loi no v dng lp tng
ng chi nhc.
Ci t chi tit cch x l m thanh nh sau:
public class AbSound {// Lp Abstract cho vic chi m thanhpublic AbSound(){}public void StopSound(){}public void PlaySound(int i, int j, int k){}
public synchronized void sound(byte type){}public void a(int i){}public void Init(){}public void Vibration(){}public void Light(){}
}
Lp m thanh cho Nokia.
import com.nokia.mid.sound.*;
import java.io.*;
import com.nokia.mid.ui.DeviceControl;
public class soundnokia extends AbSound implements
SoundListener{
// Khai bo cc bin m thanh
// Ci t tt c cc phng thc tru tng
public void StopSound(){
// Code ca Nokia}
public void PlaySound(int i, int j, int k){
// Code ca Nokia}
public synchronized void sound(byte type){// Code ca Nokia}
}
-
8/14/2019 LV - UngDungJavaChoMobileFone
17/24
n tt nghip ng dng Java cho in thoi ding
36
Lp m thanh cho SAMSUNG:
import com.samsung.util.*;public class SoundSS extends AbSound {
// Khai bo cc bin m thanh// Ci t tt c cc phng thc tru tng
public void PlaySound(int j, int k, int l){// Code play nhc ca Samsung
}public void StopSound(){
// Code Stop nhc ca Samsung}public synchronized void sound(byte type){// Code ca Samsung
}public void Vibration(){// Code ca Samsung
}public void Light(){
// Code ca Samsung}
}
Tng t cho cc my khc ta cng ci t nh vy. Sau s dng ta cn
c lp Detect Sound nh sau:
public class DetectSound{
public DetectSound(String s, String s1){}
public static AbSound Init(){
AbSound q1;try{
Class.forName("com.nokia.mid.sound.Sound");
Class.forName("com.nokia.mid.sound.SoundListener");
Class.forName("com.nokia.mid.ui.DeviceControl");
Class class1 = Class.forName("soundnokia");
q1 = (AbSound)class1.newInstance();
}
catch(Exception exception){
try{
Class.forName("com.samsung.util.AudioClip");
Class.forName("com.samsung.util.Vibration");
Class.forName("com.samsung.util.LCDLight");
Class class2 = Class.forName("SoundSS");
-
8/14/2019 LV - UngDungJavaChoMobileFone
18/24
n tt nghip ng dng Java cho in thoi ding
37
q1 = (AbSound)class2.newInstance();
}catch(Exception exception1){
q1 = new AbSound();
}
}
return q1;
}
}
Trong ng dng, khi cn s dng m thanh ta ch cn gi phng thc Init()
xc nh xem loi in thoi no ang c s dng.
AbSound ss=DetectSound.Init();
2.5.3 ng dng vo nm thanh trong ng dng c ci t cho hai loi in thoi l Nokia v
Samsung. m thanh c s dng cho phn nhc nn ca cc tr chi, khng ci
t m thanh cho phn hiu ng do khng pht m thanh song song c. Trn
Nokia m thanh c phn n iu hn trn Samsung do trn Nokia s dng m
thanh dng Tone cn trn Samsung s dng m thanh dng Midi (t p tin .mmf).
Trong n chng em s dng k thut tm lp ny xy dng ng dng tng
thch vi mi loi in thoi, y chng em ch ci t m thanh cho hai loi in
thoi l Nokai v SAMSUNG.
2.6 X l lu tr d liu
2.6.1 Gii thiu h thng lu tr d liu trn in thoi di ngVic lu tr thng tin cho vic khi to ca cc ng dng l cn thit v quan
trng. Thng tin m cc ng dng c th lu tr nh cc thng tin cu hnh ng
dng, thng tin qu trnh s dng cc ng dng,i vi my PC th vic ny
tng i d dng khi chng ta c trong tay nhiu thit b lu tr nh HDD, CD-
ROM, USB DISK,nhng vic ny tng i kh khn i vi cc ng dng trn
in thoi di ng. MIDP cung cp cho chng ta mt i tng lu tr l Record
Management System (RMS) cho php chng ta lu tr thng tin di dng cc
-
8/14/2019 LV - UngDungJavaChoMobileFone
19/24
n tt nghip ng dng Java cho in thoi ding
38
record. Cc API ca i tng ny c cung c p trong gi
javax.microedition.rms. Mt vng nhtrn cc thit b s dng MIDP sc
dnh ring cho vic lu tr cc d liu ca ng dng MIDlet. V tr v kch thc
ca vng lu tr ny c xc nh ty thuc vo nhng thit b c th.RMS cho php lu tr d liu khi ng dng thot, khi ng li v khi thit b
di ng tt hay thay pin. D liu ca ng dng s tn ti trn thit b di ng cho
n khi ng dng tht sc xa khi thit b di ng. Khi mt MIDlet b xa, tt
c cc record m n lu tr cng b xa.
Hnh sau minh ho vic lu tr d liu
Nh trong hnh v, cc MIDlet c th c nhiu hn mt tp hp cc record v
chng c th truy xut n tp hp d liu lu trong b MIDlet m chng lu tr.
Do , MIDlet 1 v MIDlet 2 c th truy truy xut n Record Store 1 v Record
Store 2 nhng chng khng th truy xut n Record Store 3. Ngc li, MIDlet 3
ch c th truy xut Record Store 3 m khng th truy xut n Record Store 1 v
Record Store 2. Tn ca b lu tr d liu phi l duy nht trong mt b MIDlet
nhng trong cc b MIDlet khc nhau c th trng trn.
H thng RMS lu tr cc bn ghi theo mt mng cc byte. Cc mng byte c
chiu di khc nhau v mi mng byte c gn mt s ID bn ghi. Cc bn ghi
c nh danh bng mt s ID duy nht. Cc s ID c nh s bt u t 1. Cc
MIDlet 1 MIDlet 1
Lu trbn ghi 1
Lu trbn ghi 2
MIDlet 3
Lu trbn ghi 3
-
8/14/2019 LV - UngDungJavaChoMobileFone
20/24
n tt nghip ng dng Java cho in thoi ding
39
s ID s tng dn v khng c dng li cho d bn ghi c b xo nn s tn ti
mt s khong trng trong cc ID bn ghi. MIDP khng kim sot vic ghi qu s
bn ghi ti a, iu ny ph thuc vo ng dng.
2.6.2 nh dng, thm, xa cc recordThm record gm 2 bc: bc u tin l nh dng record theo cc yu cu
v bc hai l thm cc record c nh dng vo RMS. RMS khng h trs
tun t ho do ta phi nh dng cc mng byte lu tr bn ghi.
Sau y l v d ca vic nh dng lu tr bn ghi, mmt RMS v sau l
thm d liu bn ghi vo RMS.
ByteArrayOutputStream baos=new ByteArrayOutputStream();
DataOutoutStream outputStream=new DataOutputStream(baos);
outputStream.writeByte(T);
outputStream.writeInt(score);
outputStream.writeUTF(name);
byte[] theRecord=baos.toByteArray();
recordStore rs=null;
rs=RecordStore.openRecordStore(RecordStoreName,CreateIfNotEx
ist);
int RecordID=rs.addRecord(theRecord,0,theRecord.length);
2.6.2.1nh dng dliu bn ghiTrong v d trn hai dng u to mt lung xut ghi d liu bn ghi. S
dng i tng DataOutputStream cho php cc bn ghi d dng c nh dng
Record ID 1 Byte Byte Byte Byte Byte
Byte Byte Byte Byte ByteRecord ID 2 Byte Byte Byte Byte
T Score Name
-
8/14/2019 LV - UngDungJavaChoMobileFone
21/24
n tt nghip ng dng Java cho in thoi ding
40
theo cc kiu chun ca Java (long, int ,string,) m khng phi quan tm
n vic tch n thnh d liu dng byte. Phng thc writeInt(),
writeByte(), writeUTF() nh dng d liu nh hnh v (tag, score,
name). S dng th tag lm c ch xc nh loi record sau ny. Phng thctoByteArray() chp d liu trong mt lung xut thnh mt mng byte cha cc
bn ghi lu tr. Bin theRecord tham chiu n d liu ng c nh
dng.
2.6.2.2Thm record v RMSKhi d liu c nh dng, n c thc thm vo RMS. Phng thc
openRecordStore() to v mmt RMS vi tn l RecordStoreName. Phng
thc addRecord dng thm record bt u t byte 0 ca theRecord v tr v ID
ca bn ghi gn vi record ny.
2.6.2.3Xa bn ghiBn ghi c xa bng cch chuyn s ID bn ghi cho phng thc
deleteRecord() ca i tng RecordStore. Khi bn ghi c ID 7 c xa, thm
mi bn ghi th bn ghi c ID l 8, ID 7 khng c dng li.
2.6.2.4Lc cc bn ghi (Filtering Records)Giao din RecordFilter cung cp mt cch thun tin lc cc bn ghi theo
tiu chun nht nh, RecordEnumeration c thc dng duyt qua cc bn
ghi v ch tr v cc record ph hp vi tiu chun xc nh. Giao din
RecordFilter c phng thc matches() dng xc nh cc tiu chun ph
hp. Phng thc matches() c tham su vo l mng byte biu din mt bn
ghi. Phng thc tr v true nu bn ghi ny ph hp vi tiu chun nh ngha.
-
8/14/2019 LV - UngDungJavaChoMobileFone
22/24
n tt nghip ng dng Java cho in thoi ding
41
Class IntegerFilter implements RecordFilter {
Public boolean matches(byte [] candidate) throws
IlleegalArgumentException {
Return (candidate[0]==T);
}
Trong v d trn, IntegerFilter dng lc ra cc bn ghi c byte u tin
l T. Nn nhrng cc bn ghi khng c cng nh dng nn vic s dng byte u
tin lm th tag l rt c ch. Phng thc matches ch tr v true nu byte u tin
l T.
2.6.2.5Sp xp cc bn ghiCc bn ghi trong RMS c thc sp xp theo mt th t no do chng
ta nh ngha. Vic sp xp c thc hin thng qua giao din
RecordComparator. Giao din ny c phng thc compare() phi c
implementnh ngha cch hai bn ghi so snh theo th t. Cc tham su vo
l hai mng byte biu din hai record. Phng thc compare() tr v mt trong ba
gi tr sau:
EQUIVALENT Hai record c xem l ging nhau.
FOLLOWS Record u tin c th t theo sau record th hai.PRECEDES Bn ghi u tin c th tng trc bn ghi th hai.
T Byte Byte Byte Byte Byte Byte Byte ByteRecord ID
S Byte Byte Byte Byte Byte Byte Byte ByteRecord ID
T Byte Byte Byte Byte Byte Byte Byte ByteRecord ID
S Byte Byte Byte Byte Byte Byte Byte ByteRecord ID
-
8/14/2019 LV - UngDungJavaChoMobileFone
23/24
n tt nghip ng dng Java cho in thoi ding
42
V d sp xp cc record s dng giao din RecordComparator.
Class IntegerCompare implements RecordComperation {
Public int compare(byte[] b1, byte[] b2){
DataInputStream is1=new DataInputStream(new
ByteArrayInputStream(b1));
DataInputStream is2=new DataInputStream(new
ByteArrayInputStream(b2));
is1.skip(1);
is2.skip(1);
int i1=is1.readInt();
int i2=is2.readInt();
if (i1>i2) return RecordComperation.FOLLOWS;
if (i1
-
8/14/2019 LV - UngDungJavaChoMobileFone
24/24
n tt nghip ng dng Java cho in thoi ding
ngu nhin. Cc record c duyt qua bng phng thc nextRecord(). Ln u
tin c gi n s tr v record u tin trong tp lit k. Ln gi k tip n s tr
v record k tip theo th tc ta nh ngha.
V d biu din qu trnh lit k cc record.IntegerFilter iFilt= new IntegerFilter();
IntegerCompare iCompare= new IntegerCompare();
RecordEnumeration intRecEnum=null;
intRecEnum=recordStore.enumerateRecords((RecordFilter)iFilt,
(RecordCompare)iCompare,false);
while (intRecEnum.hasNextElement()){
byte b[]=intRecEnum.nextRecord();
}
Trong v d trn, mt i tng IntegerFilter v IntegerComparec
to ra. IntegerFilter s ch tr v cc record cha field s nguyn,
IntegerCompare s sp xp cc record theo th t s hc.
B lit k bn ghi sc nh ngha v khi to bng output ca phng thc
enumerateRecords() ca lp RecordStore. Phng thc enumerateRecords()
c 3 tham s: tham su tin l i tng lc (iFilt), tham s th hai tham chiu
n i tng sp xp (iCompare), tham s cui cng l mt gi tr boolean xc
nh b lit k c c c p nht khi cc record c c p nht, thay i hay xa
khng.