lv - ungdungjavachomobilefone

Upload: hoclieumo

Post on 31-May-2018

213 views

Category:

Documents


0 download

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.