Xem mẫu

  1. P TRÌNH TRÊN THI T BI DI NG 1. Gi i thi u Java và ng d ng l p trình trên thi t b di ng 1.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 kii 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 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ý. 1.2 ng d ng l p trình trên thi t b di ng b ng J2ME c tiêu c a c a J2ME là cho phép ng i l p trình vi t các ch ng trình ng d ng ng l p 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: Hi n tr ng Các API khác MIDP- Mobile Information DeviceProfile u hình CLCD-( Connected Limited Device Configuration) Máy o Java Ph n c ng thi t b 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 , 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ã l nh khác nhau. M c tiêu c a J2ME là cung c p m t chu n cho t t c các l ai thi t b di ng khác nhau. ng máy o Java: Khi mã ngu n Java c 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 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. 1
  2. ng c u hình : 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. 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 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 ngh a 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 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 - tr i t ng Display - tr Form và giao di n ng i dùng - tr Timer và Alert - 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 i server. - Thêm các API h tr Multimedia. - r ng các tính n ng c a Form 2. MIDlet Các ng d ng J2ME c g i là MIDlet ( Mobile Information Device Applet). MIDlet là m t 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(), pauseApp(), và destroyApp(). an ch ng trình t i thi u c a MIDlet: import javax.microedition.midlet.*; public class exMIDlet extend MIDlet { public exMIDlet( ) { } 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 n c t m d ng. o Ph ng th c destroyApp( ): c g i khi thoat kh i MIDlet. 3. h a trong J2ME Cá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 am 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. 2
  3. 3.1 h a m c cao h a m c cao là l p con c a l p Screen. Nó cung c p các thành ph n nh text box, form, list và alert. 3.1.1 TextBox p Textbox cho phép ng i dùng nh p và s an th o v n b n. Ng i l p trình có th nh ngh a s ký t t i a, gi i h n d li u nh p ( s , m t kh u, imail,…) và hi u ch nh i dung c a textbox. package Edu.TextBox; import javax.microedition.lcdui.*; import javax.microedition.midlet.*; import javax.microedition.midlet.MIDletStateChangeException; public class TextBoxMIDlet extends MIDlet implements CommandListener { private Display display; private TextBox textBox; private Command quitCommand; public TextBoxMIDlet() { } public void destroyApp(boolean unconditional) { } protected void pauseApp() { } protected void startApp() throws MIDletStateChangeException { display = Display.getDisplay(this); quitCommand = new Command("Thóat",Command.SCREEN,1); textBox=new TextBox("Soan Thao:","",100,0); textBox.addCommand(quitCommand); textBox.setCommandListener(this); display.setCurrent(textBox); } public void commandAction(Command choice, Displayable displayable) { if(choice==quitCommand){ destroyApp(false); notifyDestroyed(); } } } 3.1.2 Form Form là l p h u d ng nh t c a các l p Sreen b i vì nó cho phép ch a nhi u item trên cùng m t màn hình. Các item có th là datafield, TextField, ImageItem. 3
  4. package Edu.Form; import javax.microedition.lcdui.*; import javax.microedition.midlet.*; import javax.microedition.midlet.MIDletStateChangeExceptio n; public class FormMIDlet extends MIDlet implements CommandListener { private Display display; private Form fr; private Command themCommand; private Command quitCommand; public FormMIDlet() { } public void destroyApp(boolean unconditional) { } protected void pauseApp() { } protected void startApp() throws MIDletStateChangeException { display = Display.getDisplay(this); quitCommand = new Command("Thóat",Command.SCREEN,1); themCommand = new Command("Thêm",Command.BACK,1); fr=new Form("Form: "); fr.append("Muc 1"); fr.addCommand(quitCommand); fr.addCommand(themCommand); fr.setCommandListener(this); display.setCurrent(fr); } public void commandAction(Command choice, Displayable displayable) { if(choice==quitCommand){ destroyApp(false); notifyDestroyed(); } if(choice==themCommand){ fr.append("\nMuc moi"); } } } 3.1.3 List p List là m t Screen ch a danh sách các l a ch n, ng i s d ng có th t ng tác v i List và ch n m t hay nhi u item. 4
  5. package Edu.listbox; import javax.microedition.lcdui.*; import javax.microedition.midlet.*; import javax.microedition.midlet.MIDletStateChangeExcepti on; public class listbox extends MIDlet implements CommandListener { private Display display; private List ls; private Command chonCommand; private Command quitCommand; public listbox() { } public void destroyApp(boolean unconditional) { } protected void pauseApp() { } protected void startApp() throws MIDletStateChangeException { display = Display.getDisplay(this); quitCommand = new Command("Thóat",Command.SCREEN,1); chonCommand = new Command("Chon",Command.BACK,1); ls=new List(null, Choice.IMPLICIT, new String[]{ "Muc chon 1", "Muc chon 2", "Muc chon 3" }, new Image[]{null, null, null }); ls.addCommand(quitCommand); ls.addCommand(chonCommand); ls.setCommandListener(this); display.setCurrent(ls); } public void commandAction(Command choice, Displayable displayable) { if(choice==quitCommand){ destroyApp(false); notifyDestroyed(); } if(displayable == ls){ if( choice ==ls.SELECT_COMMAND) { switch( ls.getSelectedIndex()){ case 0: /////.......... break; case 1: //////......... break; case 2: //////......... break; } } } } } 5
  6. 3.2 h a m c th p h a m c th p là l p con c a l p Canvas. L p này cung c p các ph ng th c h a cho phép v lên màn hình hay vào m t m hình cùng v i các ph ng th c x lý s ki n bàn phím. L p này dùng cho các ng d ng trò ch i c n u khi n v màn hình. Canvas và Graphics là hai l p ch y u c a các hàm API c p th p. Canvas là m t khung cho phép ng i l p trình có th v lên thi t b trình bày c ng nh vi c x lý s ki n. Còn l p Graphics cung c p các i t ng v . 3.2.1 L p Canvas 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 - 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. 3.2.2 L p Graphics i 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. 6
  7. protected void pauseApp() { } protected void startApp() throws MIDletStateChangeException { display.setCurrent(canvas); } public void exitMIDlet(){ destroyApp(false); notifyDestroyed(); } } class KeyCodeCanvas extends Canvas implements CommandListener{ private Command quitCommand; private KeyCodes midlet; private int x=getWidth()/2, y=getHeight()/2; public KeyCodeCanvas(KeyCodes midlet) { this.midlet= midlet; quitCommand = new Command("Thóat", Command.SCREEN, 1); addCommand(quitCommand); setCommandListener(this); } protected void paint (Graphics g){ g.setColor(255, 255, 255); g.fillRect(0, 0, getWidth(), getHeight()); g.setColor(0, 0, 0); g.drawArc(x, y,30, 30, 0, 360); } public void commandAction (Command c, Displayable d) { if (c== quitCommand){ package Edu.KeyCodes; midlet.exitMIDlet(); import } javax.microedition.lcdui.*; } import protected void keyPressed(int javax.microedition.midlet.*; keyCode) { import if (keyCode == javax.microedition.midlet. getKeyCode(RIGHT)){ MIDletStateChangeException; x=x+10; public class KeyCodes extends } MIDlet { if (keyCode == private Display display; getKeyCode(LEFT)){ private KeyCodeCanvas x=x-10; canvas; } public KeyCodes() { if (keyCode == getKeyCode(UP)){ display= y=y-10; Display.getDisplay(this); } canvas = new if (keyCode == KeyCodeCanvas(this); getKeyCode(DOWN)){ } y=y+10; public void } destroyApp(boolean unconditional) { repaint(); } } } 7
  8. 4. p trình Bluetooth thu t bluetooth c dùng truy n thông gi a n th ai di ng v i n th ai di ông, ho c gi a n th ai di ng và mán 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. t ng d ng bluetooth bao g m hai ph n: server dùng t o d ch v bluetooth và ph n client t n i n server và th c hi n truy n thông. Ph n server: M i m t thi t b bluetooth bao g m m t i t ng thi t b c c b mà nó giúp cho vi c truy n thông gi a các thi t b . Trong JSR82 ph ng th c LocalDevice.getLocalDevice() tr v i t ng này. m c k t n i bluetooth ph i s d ng chu i URL b ng ph ng th c Connector.open(URL) và ph ng th c này tr v lu ng chuy n d li u StreamConnectionNotifier. d ng hai ph ng th c openOutputStream() ho c openInputStream() g i ho c nh n d li u. URL c xác nh: URL = "btspp://localhost:" + UUID + ";name=rfcommtest;authorize=true"; Trong ó UUID có th là : OBEX, L2CAP, RFCOMM m_strUrl= "btspp://localhost:" + RFCOMM_UUID + "; name=rfcommtest;authorize=true"; // m_StrmConn = BTFACADE.waitForClient(SERVICE_NBR); try { m_LclDevice = LocalDevice.getLocalDevice(); m_LclDevice.setDiscoverable(DiscoveryAgent.GIAC); m_StrmNotf = (StreamConnectionNotifier)Connector.open(m_strUrl); //Now it will start waiting for the client connection m_StrmConn = m_StrmNotf.acceptAndOpen(); m_bInitServer = true; m_Output = m_StrmConn.openOutputStream(); m_Input = m_StrmConn.openInputStream(); } catch (BluetoothStateException e) { System.err.println( "BluetoothStateException: " + e.getMessage() ); } 8
  9. catch (BluetoothStateException e) { System.err.println( "BluetoothStateException: " + e.getMessage() ); } catch (IOException ex) { ex.printStackTrace(); } catch(Exception e) { Ph n Client: t o c client s d ng các ph ng th c sau tìm thi t b bluetooth và tìm d ch v c trên nó: void deviceDiscovered(RemoteDevice btDevice, DeviceClass od) void servicesDiscovered(int transID, ServiceRecord[] records) Sau khi k t n i c thi t b bluetooth s d ng các ph ng th c write () và read() g i và nh n d li u. public void SearchAvailDevices() { try { //First, get the local device and obtain the discovery agent. m_LclDevice = LocalDevice.getLocalDevice(); m_DscrAgent= m_LclDevice.getDiscoveryAgent(); m_DscrAgent.startInquiry(DiscoveryAgent.GIAC,this); } catch (BluetoothStateException ex) { System.out.println("Problem in searching the Bluetooth devices"); ex.printStackTrace(); } } public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) { try { // Device information System.out.println("Major Device Class and information : " + cod.getMajorDeviceClass() + " Minor Device Class: " + cod.getMinorDeviceClass()); System.out.println("Bluetooth Address of the device: " + btDevice.getBluetoothAddress()); System.out.println("Friendly Name: " + btDevice.getFriendlyName(true)); // Now its our responsibility to search its services UUID uuidSet[] = new UUID[1]; uuidSet[0] = RFCOMM_UUID; 9
  10. int searchID = m_DscrAgent.searchServices(null,uuidSet, btDevice,this); } catch (Exception e) { System.out.println("Device Discovered Error: " + e); } } public void servicesDiscovered(int transID, ServiceRecord[] records) { for (int i = 0; i < records.length; i++) { m_strUrl = records[i].getConnectionURL(ServiceRecord. AUTHENTICATE_ENCRYPT, false); System.out.println(m_strUrl); //we have found our service protocol if(m_strUrl.startsWith("btspp")) { m_bServerFound = true; m_bInitClient=true; break; } } 5. Phát tri n ng d ng MIDlet 5.1 Chu n b các ph n m m Eclipse 3.1 Sun Wireless Toolkit EclipseME Plugin for Eclipse 5.2 Cài t c 1: Cài các ph n m m Eclipse và Wireless Toolkit c 2: Cài t EclipseME plugin 10
  11. c 3: c 4: c 5: 11
  12. c 5: c 6: 12
  13. c 7: c 8: 13
  14. c 9: c 10: 14
  15. c 11: c 12: c 13: 15
  16. c 14: c 15: 16
  17. c 16: c 17: 17
  18. c 18: c 19: 18
  19. 5.3 óng gói ch ng trình 19
  20. 5.4 Cài t ch ng trình lên n th ai di ng Sau khi óng gói ch ng trình s d ng trình PC Suite cài t ch ng trình lên n th ai di ng 6. t lu n - c u ã tìm hi u ki n trúc t ch c l p trình J2ME trên thi t b di ng. - ng v i m i k thu t l p trình trên thi t b di ng xây d ng c các an mã J2ME ng ng. Tài li u tham kh o: 1. http://www.codeguru.com/java 2. http://www.benhui.net 3. http://www.diendantinhoc.org 4. Bluetooth – Link manager and J2ME programming, Kjell Jorgen Hole 20
nguon tai.lieu . vn