Công nghệ J2ME

J2ME được phát triển từ kiến trúc

JavaCard, EmbededJava và PersonalJava

của phiên bản Java 1.1.

 Khi phiên bản Java 2 ra đời, Sun thay thế

PersonalJava bằng phiên bản Java 2 Micro

Edition, viết tắt là J2ME.

 J2ME được sử dụng cho các thiết bị nhỏ

gọn với dung lượng bộ nhớ bé và khả

năng xử lý thấp.

pdf162 trang | Chia sẻ: Mr Hưng | Lượt xem: 857 | Lượt tải: 0download
Bạn đang xem trước 20 trang nội dung tài liệu Công nghệ J2ME, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ạng thái này, nó không đủ thông tin để yêu cầu tất cả tài nguyên cần để hoạt động. Trạng thái REALIZED  Gọi phương thức realize() sẽ chuyển từ trạng thái UNREALIZED sang trạng thái REALIZED và khởi tạo thông tin mà Player cần để có tài nguyên media Lập trình trên thiết bị di động 116 Trạng thái Trạng thái PREFETCHED Khi ở trạng thái REALIZED, Player vẫn cần thực hiện một số công việc tiêu tốn thời gian trước khi nó được bắt đầu Một Player ở trạng thái PREFETCHED , nếu nó đã được khởi động. Prefetching làm giảm sự khởi động ngầm của Player đến giá trị nhỏ nhất có thể Lập trình trên thiết bị di động 117 Trạng thái Trạng thái STARTED  Việc gọi phương thức start() sẽ làm cho Player chuyển từ trạng thái PREFETCHED sang trạng thái STARTED. Khi Player đang ở trạng thái STARTED, có nghĩa là nó đang chạy và xử lý dữ liệu.  Khi Player chuyển từ trạng thái PREFETCHED sang STARTED, nó gửi một sự kiện STARTED, và ngược lại gửi sự kiện STOPPED, END_OF_MEDIA hay STOP_AT_TIME phụ thuộc vào lý do mà nó dừng. Lập trình trên thiết bị di động 118 Trạng thái  Ở trạng thái CLOSED, Player giải phóng tất cả tài nguyên của nó và đối tượng Player lúc này cũng không thể được sử dụng lại.  Việc gọi phương thức close() sẽ làm cho Player chuyển từ trạng thái UNREALIZED, REALIZED, PREFETCHED và STARTED sang trạng thái CLOSED. Lập trình trên thiết bị di động 119 Duration Để biết thời gian file nhạc đã chạy, sử dụng phương thức: play.getDuration() Thời điểm nó dừng là lúc duration của nó đã hết, hoặc khi nó chuyển từ state STARTED  state PREFETCHED. Lập trình trên thiết bị di động 120 VolumeControl VolumeControl là một giao diện để thao tác điều chỉnh âm thanh của một Player. Giao diện này sẽ cho âm lượng của âm thanh sử dụng một giá trị số nguyên thay đổi từ 0 đến 100 (0 là mức thấp nhất, 100 là mức cao nhất). Lập trình trên thiết bị di động 121 Các phương thức của giao diện getLevel() Lấy âm lượng ở mức hiện tại, giátrị trả về là kiểu int. getMuted() Lấy trạng thái mute của tín hiêu liên quan đến VolumeControl này, giá trị trả về là kiểu boolean. setLevel(int level) Đặt âm lượng sử dụng các giá trị từ 0 đến100; setMute(boolean mute)Thiết lập trạng thái mute hoặc unmute. Lập trình trên thiết bị di động 122 Playing audio InputStream inputStream = getClass().getResourceAsStream(“/music.mid”); Player player = Manager. createPlayer (inputStream, "audio/mpeg"); player.setLoopCount(-1); player.realize(); player.prefetch(); player.addPlayerListener(this); player.start(); Lập trình trên thiết bị di động 123 Playing video Thực hiện tương tự như audio cho đến khi thiết lập một listener cho player và nhận đối tượng điều khiển video mà video có thể được hiển thị trên form như là một item. Lập trình trên thiết bị di động 124 Playing video VideoControl videoControl = (VideoControl) Player.getControl("VideoControl"); if (videoControl != null) { Item videoItem = (Item) videoControl .initDisplayMode (VideoControl.USE_GUI_PRIMITIVE,null); append(videoItem); } player.start(); Lập trình trên thiết bị di động 125 Lập trình trên thiết bị di động 126 Giao tiếp Bluetooth với JME Bluetooth  Bluetooth là một công nghệ cho phép truyền thông giữa các thiết bị với nhau mà không cần cáp và dây dẫn. Nói cách khác, nó là một chuẩn điện tử. Lập trình trên thiết bị di động 128 Bluetooth  Bluetooth được xây dựng bởi Bluetooth Special Interest Group (SIG).  Bluetooth được đặt theo tên thân mật của một vị vua Thụy Điển: Harald Bluetooth. Lập trình trên thiết bị di động 129 Bluetooth  Bluetooth là chuẩn kết nối không dây tầm ngắn, thiết kế cho các kết nối thiết bị cá nhân hay mạng cục bộ nhỏ, trong phạm vi băng tần từ 2.4 đến 2.485 GHz.  Hoạt động trên 79 tần số đơn lẻ.  Được thiết kế kết nối tầm thấp với 3 lớp khác nhau nhằm có thể cơ động truyền sóng đi xa nhất đến mức có thể. Thông thường, các loại di động hiện tại dùng Bluetooth ở lớp thứ 2, với cường độ 2.5 miliWatt (mW) và phạm vi chỉ có 12m trở lại. Lập trình trên thiết bị di động 130 Các thế hệ Bluetooth Lập trình trên thiết bị di động  Bluetooth 1.0  Bluetooth 1.1  Bluetooth 1.2  Bluetooth 2.0+ERD  Bluetooth 2.1+ERD  Bluetooth 3.0+HS 131 Ưu nhược điểm của Bluetooth Ưu điểm: -Truyền dữ liệu miễn phí. -Thiết lập kết nối dễ dàng mà không cần Ascess Point. -Sử dụng được bất cứ ở đâu. -Sử dụng cùng một chuẩn giao thức nên mọi thiết bị bluetooth có thể kết nối với nhau. Lập trình trên thiết bị di động 132 Ưu nhược điểm của Bluetooth Nhược điểm: -Khoảng cách kết nối ngắn. -Bảo mật thấp. -Tốc độ truyền không cao. -Bị nhiễu bởi một số thiết bị sử dụng sóng Radio khác. Lập trình trên thiết bị di động 133 Bluetooth với J2ME Lập trình trên thiết bị di động 134 Bluetooth với J2ME  Có 3 loại giao tiếp trong công nghệ Bluetooth: -OBEX: Viết tắt bởi “Object Exchange” giao thức giao tiếp được sử dụng để trao đổi dữ liệu vật lý như các tập tin, hình ảnh, và kể cả các định dạng nhị phân. -L2CAP: Viết tắt bởi “Logical Link Control and Adaptation Protocol” được sử dụng để gửi các gói dữ liệu giữa máy chủ và máy khách. -RFCOMM: Viết tắt bởi ” Radio Frequency Communication” được sử dụng cho luồng dữ liệu đơn giản. Lập trình trên thiết bị di động 135 Mô hình hoạt động của ứng dụng Client và Server trong J2ME Bluetooth Bước Server Client 1 Quản lý thiết bị, thiết lập chế độ nhận biết Quản lý thiết bị, thiết lập chế độ nhận biết 2 Mở kết nối Bluetooth, kết nối dịch vụ Nhận biết các thiết bị Bluetooth xung quanh 3 Chờ Client kết nối Nhận biết dịch vụ thiết bị Bluetooth đã nhận biết ở trên 4 Nếu tìm thấy dịch vụ cần thiết, tiến hành kết nối tới dịch vụ đó 5 Mở các dòng nhập xuất dữ liệu để trao đổi thông tin Mở các dòng nhập xuất dữ liệu để trao đổi thông tin Lập trình trên thiết bị di động 136 Tạo Server -Tìm kiếm các thiết bị khác: Sử dụng 2 hàm: +LocalDevice.getLocalDevice () +setDiscoverable(DiscoveryAgent.GIAC) -Mở kết nối Bluetooth Xây dựng một chuỗi URL Bluetooth: URL = “btspp://localhost:” + UUID + “;name=rfcommtest;authorize=true”; Lập trình trên thiết bị di động 137 StreamConnectionNotifier Hàm acceptAndOpen() Chuỗi URL Bluetooth Hàm Connector.open (URL) StreamConnection Hàm openOutputStream() hoặc openInputStream() Lập trình trên thiết bị di động 138 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(); } Lập trình trên thiết bị di động 139 Tạo Client  Trước tiên, ta cần tìm kiếm các thiết bị Bluetooth xung quanh. 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(); } } Lập trình trên thiết bị di động 140 Tạo Client Để tạo một Client, ta cần thực thi một giao diện DiscoveryListener. Giao diện này có các hàm chính sau:  void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod)  void servicesDiscovered(int transID, ServiceRecord[] records)  void serviceSearchCompleted(int transID, int respCode)  Connector.open(m_strUrl) Lập trình trên thiết bị di động 141 Gửi và nhận dữ liệu  Khi client và server bắt đầu làm việc, quá trình giao tiếp được thực hiện thông qua 2 hàm: sendMessages() và receiveMessages(). public void sendMessages(String v_strData) { if((m_bInitClient) || (m_bInitServer) ) { try { m_Output.write(v_strData.length()); m_Output.write(v_strData.getBytes()); } catch (IOException ex) { ex.printStackTrace(); } } } Lập trình trên thiết bị di động 142 public String recieveMessages() { byte[] data = null; try { int length = m_Input.read(); data = new byte[length]; length = 0; while (length != data.length) { int ch = m_Input.read(data, length, data.length - length); if (ch == -1) { throw new IOException("Can't read data"); } length += ch; } } catch (IOException e) { System.err.println(e); } return new String(data); } Lập trình trên thiết bị di động 143 Kết nối mạng với J2ME  Nội dung: ◦ Generic Connection Framework ◦ Kết nối HTTP ◦ Kết nối Socket ◦ Kết nối Datagram Lập trình trên thiết bị di động 144 Generic Connection Framework - GCF là một tập hợp các lớp và giao diện được thiết kế nhằm tạo thuận tiện cho việc truy xuất đến các hệ thống lưu trữ và kết nối mạng. - Mục tiêu của GCF không phải là tạo ra một tập các lớp mới hoàn toàn mà nó cung cấp một tập con của J2SE một cách có chọn lọc. Tập con này được giới hạn và tối ưu để phù hợp với những ràng buộc và khác biệt của những thiết bị di động. Lập trình trên thiết bị di động 145 Cây phân cấp connection Lập trình trên thiết bị di động 146 Giao diện GCF Chú thích Connection Là kiểu kết nối cơ bản trong GCF. Và là cha của các kiểu kết nối còn lại ContentConnection Quản lý một kết nối (http,..) Cung cấp các phương thức cơ bản: độ dài nội dung, mã hóa và kiểu của nội dung DatagramConnection Quản lý kết nối Datagram InputConnection Quản lý kết nối vào OutputConnection Quản lý kết nối ra StreamConnection Quản lý một dòng. Là sự tổng hợp của InputConnection và OutputConnection StreamConnectionNotifier Lắng nghe trên một cổng và tạo ra một StreamConnection ngay sau khi nhận thấy có hoạt động trên cổng. Lập trình trên thiết bị di động 147 - Trong GCF thì URLs có vai trò quan trọng, nó được dùng trong Internet. URLs đưa ra vị trí , cách thức truy cập đến nguồn tài nguyên - Dạng của một URLs trong GCF protocol://host:port/url-path Trong đó protocol: Là phương thức xử lý hay giao thức (http, ftp) host: Là tên hoặc địa chỉ IP của máy tính nơi đặt tài nguyên port: Cổng hoạt động của giao thức(tùy chọn), phụ thuộc vào scheme url-path: Là đường dẫn đến tài nguyên Lập trình trên thiết bị di động 148 Một số protocol và loại connection Lập trình trên thiết bị di động Protocol Kết nối Kiểu kết nối GCF Định nghĩa bởi bt12cap Bluetooth L2CAPConnection JSR82 datagram Datagram DatagramConnection Mọi CLDC , CDC, MIDP File File Access FileConnection, InputConnection JSR75 149 http HyperText TransferProtocol HttpConnection MIDP 1.0, MIDP 2.0, Foundation Profile, J2SE (JSR 197). Support is required https Secure HTTP HttpsConnection MIDP 2.0 comm Serial I/O ComConnection MIDP 2.0 Lập trình trên thiết bị di động 150 sms mms cbs Short messaging service Multimedia Messaging Service Cell Broadcast SMS MessageConnection JSR 120, JSR 205 comm Serial I/O ComConnection MIDP 2.0 Socket ServerSocket Socket SocketConnection, ServerSocketConn ection JSR118 (MIDP 2.0) datagram UDP Datagram UDPDatagramCon nection JSR118 (MIDP 2.0) Lập trình trên thiết bị di động 151 Kết nối HTTP HTTP là giao thức duy nhất chắc chắn được hỗ trợ bởi MIDP 1.0. Chúng ta có thể giao tiếp với máy chủ hay bất kỳ thiết bị từ xa nào có hỗ trợ giao thức này nhờ vào lớp HttpConnection. Lớp Connector cung cấp cho người dùng bảy phương thức để tạo kết nối tới máy chủ . Lập trình trên thiết bị di động 152 Phương thức Mô tả static Connection open(String name) Tạo một kết nối có chế độ READ_WRITE static Connection open(String name, int mode) Tạo một kết nối với chế độ được chỉ định static Connection open(String name, int mode, boolean timeouts) Tạo một kết nối với chế độ được chỉ định, thêm ngoại lệ time out Lập trình trên thiết bị di động 153 static InputStream openInputStream(String name) Tạo kết nối luồng nhập static OutputStream openOutputStream(String name) Tạo kết nối luồng xuất static DataInputStream openDataInputStream(String name) Tạo kết nối luồng nhập kiểu DataInputStream static DataOutputStream openDataOutputStream(String name) Tạo kết nối luồng xuất kiểu DataOutputStream Lập trình trên thiết bị di động 154 Tìm hiểu kết nối qua Socket - Socket có thể thực thi giao tiếp giữa hai hệ thống và cho phép kết nối mạng được coi như là một dòng (stream). - Một socket tạo thành một dòng có thể đọc hoặc ghi. - GCF cung cấp hai giao diện để làm việc với dòng: * StreamConnectionNotifier * StreamConnection - StreamConnectionNotifier được dùng cho máy chủ quản lý cổng mà máy khách kết nối đến. Generic Connection Framework Lập trình trên thiết bị di động 155 Hoạt động của Socket: Máy chủ lắng nghe các kết nối từ máy khách Máy khách tạo kết nối đến máy chủ Khi đã kết nối thành công thì trao đổi dữ liệu Generic Connection Framework Lập trình trên thiết bị di động 156 Hành động có thể làm trên Socket a. Viết từ Socket: Khi đã kết nối tốt, một dòng ra được sinh ra từ StreamConnection dùng phương thức openOutputStream() hoặc openDataOutputStream() và dùng một vài phương thức của OutputStream để viết dữ liệu . Lớp liên quan: OutputStream, DataOutput, DataOutputStream b. Đọc từ Socket: API dùng để đọc từ socket cũng tương tự như các APIs output nhưng dùng để đọc. Khi đã có dòng vào có một số lớp có thể giúp lấy dữ liệu từ một dòng. Các lớp liên quan: InputStream, DataInput, DataInputStream, Reader, InputStreamReader. Generic Connection Framework Lập trình trên thiết bị di động 157 Khi nào dùng Socket - Khi yếu tố tốc độ được đặt lên hàng đầu Generic Connection Framework Lập trình trên thiết bị di động 158 Tìm hiểu Datagram - Datagram được thiết kế để gửi gói dữ liệu trên một mạng. - Datagram cho phép gửi dữ liệu cho dù máy phục vụ có lắng nghe hay không. - Datagram là cách gửi dữ liệu không chắc chắn. - Datagram gói dữ liệu theo gói và gửi không cần biết thứ tự Generic Connection Framework Lập trình trên thiết bị di động 159 Datagram trong J2ME - Trong GCF Datagram tồn tại trong hai lớp là DatagramConnection và Datagram. - Datagram không giống như một dòng. - Để gửi dữ liệu sử dụng J2ME API bạn cần ba thứ: địa chỉ gửi gói dữ liệu, cổng nơi hệ thống nhận dữ liệu và dữ liệu. - Dữ liệu trong Datagram ở dạng byte Generic Connection Framework Lập trình trên thiết bị di động 160 Ví dụ - Máy khách kết nối DatagramConnection conn= (DatagramConnection)Connector.open(“datagram://127.0.0.1:88”, Connector.READ_WRITE); - Tạo đối tượng Datagram để gửi thông báo Datagram datagr= conn.newDatagram(100); - Chuyển dữ liệu sang dạng byte byte [] data=“Message from client”.getBytes(); - Đặt dữ liệu vào Datagram datagr.setData(data,0,data.length); - Gửi dữ liệu conn.send(datagr); Lập trình trên thiết bị di động 161 Q/A Lập trình trên thiết bị di động 162

Các file đính kèm theo tài liệu này:

  • pdfltttbd_chuong2_p2_9731.pdf