lập trình trên thiết bị di động

Chia sẻ: Nguyen Van Dau | Ngày: | Loại File: PDF | Số trang:20

0
123
lượt xem
46
download

lập trình trên thiết bị di động

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

đây là thiết bị di động với cấu hình phần cứng của nó như bộ nhớ, tố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 loại thiết bị di động khác nhau....

Chủ đề:
Lưu

Nội dung Text: lập trình trên thiết bị di động

  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
Đồng bộ tài khoản