Posts from the ‘JSR’ Category

Wireless Messaging API 2.0(JSR 205)

I.Giới thiệu

Wireless Messaging API 2.0 là một gói tùy chọn của J2ME. Nó được sử dụng để truy cập vào tài nguyên giao tiếp không dây như SMS(Short Message Service), CBS(Cell Broadcast Service) và MMS(Multimedia Messaging Service). Chức năng chính của nó là gửi MMS bao gồm: audio, text, image và video. Messaging API dựa trên GCF(Generic Collection Framework) được định nghĩa trong đặc tả CLDC.

Ban đầu, WMA được giới thiệu trong J2ME, đó là WMA 1.1 thuộc JSR 120. Sự khác nhau giữa bản 1.1 và 2.0 là hỗ trợ thêm Multi-part message sử dụng cho MMS.

II.Các gói hỗ trợ

javax.microedition.io: gói này bao gồm các interface network đã được sửa đổi để sử dụng platform có hỗ trợ kết nối message.

javax.wireless.messaging: gói này định nghĩa các API cho phép các ứng dụng gửi và nhận message. Gói này bao gồm các interface và class sau:

BinaryMessage: giao diện sử dụng cho message nhị phân.

Message: đây là giao diện cơ bản để các giao diện các kế thừa.

MessageConnection: giao diện sử dụng để gửi và nhận tin nhắn.

MessageListener: giao diện này sử dụng để thông báo khi có các message đến.

MultipartMessage: giao diện này sử dụng cho các message multipart.

TextMessage: giao diện sử dụng cho message text.

MessagePart: lớp này được sử dụng để thêm vào instance của MessagePart vào MultipartMessage.

1.Giao diện Message

Là kiểu cơ bản cho tất cả các message giao tiếp sử dụng WMA 2.0 – một Message chứa: địa chỉ nguồn, địa chỉ đích và payload.

Một số phương thức dùng để nhận và thiết lập địa chỉ nguồn và địa chỉ đích của message, và nhận timestamp của nó.

String getAddress();
void setAddress(String address);
Date getTimestamp();

WMA 2.0 định nghĩa 3 giao diện con của Message:

2.BinaryMessage

Giao diện con BinaryMessage đại diện cho một message với một payload binary, và có thể được gửi như là một SMS. Giao diện này khai báo các phương thức để nhận và thiết lập payload nhịn phân như là một mảng byte.

byte[] getPayloadData();
void setPayloadData(byte[] bytes); Read more…

Location API(JSR 179) trên J2ME – Phần 2

IV.Mốc ranh giới(Landmark)

Landmark là một vị trí vật lý với tên đại diện cho vị trí tới người dùng cuối. Location API cho phép người dùng tạo ra, thêm, lưu trữ, lấy ra hay xóa các Landmark. Hai lớp Landmark và LandmarkStore cung cấp các chức năng kể trên. Lớp Landmark đại diện cho thông tin của mốc ranh giới, các thông tin đó bao gồm: tên, mô tả, các thông tin địa chỉ và các tọa độ. Thông tin địa chỉ chính là lớp AddressInfo.

Landmark(String name, String description,
              QualifiedCoordinates coordinates, AddressInfo addressInfo)

Ví dụ: cách tạo ra một Landmark

...
AddressInfo textAddress = new AddressInfo();
textAddress.setField(AddressInfo.COUNTRY , "UK");
textAddress.setField(AddressInfo.CITY , "London");
 Landmark landmark =
  new Landmark("My Restaurant”,” My Restaurant best in  the world",
                       new QualifiedCoordinates(11.289496608768690, 34.59678880927362,460, 31.32, 45.000)
                       , textAddress);
...

LandmarkStore là một vùng được chia sẽ để lưu trữ, chỉnh sữa và xóa Landmark. Thông tin Landmark có thể được lưu trữ trong data store và có thể được sử dụng sau này khi ứng dụng cần nó. Read more…

Location API(JSR 179) trên J2ME – Phần 1

I.Giới thiệu

JSR 179 là một gói tùy chọn javax.microedition.location được cung cấp để truy cập các thông tin dựa trên vị trí. Location API cung cấp một chuẩn cho các developer viết các ứng dụng di động dựa trên vị trí. Location API cung cấp thông tin về vị trí địa lý hiện tại của thiết bị. Nó có thể được sử dụng với nhiều profile J2ME.

1.Tính toán vị trí(Expressing Location)

Vị trí có thể được thực hiện trong điều kiện không gian hay mô tả text. Vị trí không gian được thực hiện theo dạng hệ thống tọa độ: vĩ độ(latitude) – kinh độ(longitude) – độ cao. Vĩ độ được tính 0-90 độ bắc hay độ nam của đường xích đạo, ngược lại kinh độ được tính 0-180 độ đông hay độ tây của kinh tuyến chính, đi qua Greenwich, Anh. Độ cao được tính bằng mét so với mực nước biển. Mô tả text được tính thông qua địa chỉ đường, thành phố, mã vùng…

2.Vị trí thiết bị(location device)

Ứng dụng có thể sử dụng các phương pháp sau đây để tính toán vị trí thiết bị:

  • Cell ID(sử dụng mạng điện thoại): phương pháp Cell ID tính toán dựa trên xác định các trạm BTS(Base Transceiver Station) kết nối với thiết bị. Độ sai số của cách tính này phụ thuộc vào kích thước của cell của thiết bị di động kết nối với BTS.
  • Hệ thống định vị toàn cầu GPS(Global Positioning System)(sử dụng vệ tinh): việc xác định bằng GPS thường là phương pháp chính xác nhất, tuy nhiên nó có một số nhược điểm, đó là nó đòi hỏi phần cứng(hardware) cao, tốn pin khi sử dụng và đòi khỏi thời tiết đẹp hay để thiết bị ở những nơi thoáng đảng để có thể kết nối với vệ tinh.
  • Bluetooth(xác định vị trí trong phạm vi hẹp): việc định vị bằng Bluetooth được thực hiện trong các phạm vi hẹp, chừng 10m, độ chính xác cao, tuy nhiên phương pháp này đòi hỏi thiết bị phải có hỗ trợ Bluetooth. Read more…

Bluetooth API – JSR 82 – Phan3

VI.Bluetooth Communication

Ứng dụng Bluetooth đã thực hiện các phần sau đây để giao tiếp: khởi tạo stack, thiết lập chế độ discovery, discovery thiết bị, decovery dịch vụ và kết nối.

1.Khởi tạo stack

Trong các thiết bị Bluetooth, stack Bluetooth được sử dụng để điều khiển thiết bị. Vì vậy, nó nên được khởi tạo đầu tiên trước khi bắt đầu. Sau khi được khởi tạo, các thiết bị sẽ sẵn sàng để sử dụng.

Đặc tả JSR 82 cung cấp lớp LocalDevices. Lớp này được gọi như là một entry point cơ sở, và nó giúp khởi tạo stack. Điều này cũng được sử dụng để kiểm soát các cài đặt Bluetooth cục bộ. Lớp LocalDevice cung cấp mức thấp nhất để truy cập vào stack Bluetooth, ngoài ra nó còn câp cấp khả năng truy cập thông tin về thiết bị Bluetooth của riêng bạn.

Để khởi tạo stack, ta đơn giãn chỉ cần gọi phương thức tĩnh LocalDevice.getLocalDevice().

2.Chế độ Discovery

Để thiết lập chế độ Discovery, ta chỉ cần gọi phương thức LocalDevice.setDiscoverable(int mode). JSR 82 hỗ trợ các kiểu sau:

  • DiscoveryAgent.GIAC
  • DiscoveryAgent.LIAC
  • DiscoveryAgent.NOT_DISCOVERABLE

Một thiết bị Bluetooth có thể chứa nhiều thiết lập chế độ Discovery. Ví dụ, một thiết bị có thể cấu hình để không bị discovery, lúc này các thiết bị Bluetooth khác trong phạm vi cho phép không thể phát hiện ra thiết bị Bluetooth này. Mặc khác, một thiết bị Bluetooth có thể cấu hình để được discovery bởi các thiết bị khác, và trong trường hợp này, chế độ Discovery chính là GIAC(General Unlimited Inquiry Access Code).

Một thiết bị Bluetooth cũng có thể cấu hình để có thể được discovery “limited” bởi những thiết bị Bluetooth khác bằng cách sử dụng một limited inquiry. Bằng cách này,        chế độ discovery được thiết lập sử dụng Limited Dedicated Inquiry Access Code(LDIAS). Read more…

Bluetooth API – JSR 82 – Phan2

III.Cấu trúc Bluetooth API

Mục đích của bản đặc tả đã được xác đinh là một chuẩn API có tính mở, không độc quyền và có thể được sử dụng bởi tất cả các thiết bị hỗ trợ JavaME. Vì vậy, nó sử dụng chuẩn API và Java ME CLDC / MIDP ‘s Generic Connection Framework(GCF). Các đặc điểm quan trọng:

  • Đặc tả này cung cấp hỗ trợ cơ bản cho các giao thức và profile Bluetooth. Nó không bao gồm các API cụ thể cho tất cả các cấu hình Bluetooth đơn giản chỉ vì số lượng profile là ngày càng tăng.
  • Đặc tả này kết hợp các các giao thức truyền thông(communication)OBEX, L2CAP, và RFCOMM trong JSR 82 API, chủ yếu bởi vì tất cả các profile Bluetooth hiện tại được thiết kế để sử dụng các giao thức truyền thông.
  • Đặc tả JSR 82 địa chỉ hóa  Generic Access Profile, Service Discovery Application Profile, Serial Port Profile, và Generic Object Exchange Profile.
  • Giao thức Service Discovery cũng được hỗ trợ. JSR 82 định nghĩa đăng ký dịch vụ một cách chi tiết để chuẩn hóa quy trình đăng ký cho các lập trình ứng dụng.

JSR 82 đòi hỏi stack Bluetooth nằm bên dưới thực thi JSR 82 đủ tiêu chuẩn cho Generic Access Profile, Service Discovery Application Profile, và Serial Port Profile. Stack phải cũng cung cấp quyền truy cập vào Service Discovery Protocol; các tầng(layer) RFCOMM và L2CAP.

Các API được thiết kế theo cách sao cho các nhà phát triển có thể sử dụng ngôn ngữ lập trình Java để xây dựng profile Bluetooth mới trên đỉnh của API này miễn là các đặc tả lớp lõi(core layer) không thay đổi. Để thúc đẩy sự linh hoạt và mở rộng này, bản đặc tả không bị giới hạn bởi các API cài đặt các profile Bluetooth. JSR 82 bao gồm các API cho OBEX và L2CAP để trong tương lai các profile Bluetooth có thể được cài đặt trong Java. Hình 1 cho thấy các API được định nghĩa trong đặc tả phù hợp với kiến trúc của CLDC/MIDP.

Read more…

Tìm hiểu Bluetooth với J2ME

Trong bài này, chúng ta sẽ tìm hiểu các chuẩn giao tiếp đơn giãn của Bluetooth và cách thức để tạo ra một class đơn giãn bao đóng được công nghệ Bluetooth.

Công nghệ không dây

Hiện nay, trên thế giới có các công nghệ không dây nổi tiếng như: infraree(hồng ngoại), wifi, bluetooth và zigbee. Hồng ngoại là công nghệ được sử dụng phổ biến trong điều khiển tivi từ xa hoặc điều hòa không khí điều khiển từ xa, nơi mà giao tiếp được trỏ đến các thiết bị đích. Công nghệ wifi thì được sử dụng rộng rãi trong các lĩnh vực truyền thông và công nghệ thông tin. Zigbee là công nghệ mới nhất, nó rẻ hơn tất cả các phương tiện truyền thông không dây khác. Công nghệ Bluetooth là công nghệ được sử dụng hầu hết trong các thông tin liên lạc tạm thời, đặc biệt là bên trong các thiết bị di động, palm,pocket PCi, vv. Nó có thể được sử dụng để trao đổi các đối tượng, các gói tin, hoặc một stream đơn giản.

Các loại giao tiếp Bluetooth

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. Read more…

Bluetooth API – JSR 82 – Phan1

I.Giới thiệu

Bluetooth là một trong những giao thức truyền thông không dây. Nó được sử dụng chủ yếu cho khoảng cách ngắn và trong các thiết bị với tiêu thụ điện năng thấp. Với sự trợ giúp của Bluetooth, bạn có thể giao tiếp một cách có định hướng lên đến 30 feet tại 1 Mb/s. JSR 82 là dựa trên phiên bản 1.1 của đặc tả Bluetooth.

Bluetooth có tính mở, là một tiêu chuẩn không độc quyền cho việc phát triển các ứng dụng Bluetooth bằng cách sử dụng ngôn ngữ lập trình Java. Nó che giấu sự phức tạp của giao thức Bluetooth sau một tập các Java API; nónhấn mạnh vào việc phát triển ứng dụng hơn là các chi tiết ở cấp thấp của Bluetooth.

Đặc tả này hỗ trợ các giao thức Bluetooth sau:

  • RFCOMM
  • OBEX
  • Service Discovery protocols
  • L2CAP (Logical Link Control and Adaptation Protocol)

Read more…

Wireless Messaging API – JSR120 -Phan2

III.Mô tả WMA

WMA API bao gồm các giao diện trong một package: javax.wireless.messing; định nghĩa tất cả các APIs để gửi và nhận các message text/binary. Gói này gồm các giao diện sau:

  • Message
  • BinaryMessage
  • TestMessage
  • MessageConnection
  • MessageListener

Hình 2 mô tả các components của WMA

3.1.Message interface : Read more…

Wireless Messaging API – JSR120 -Phan1

I.Giới thiệu

Wireless Messaging API (WMA API) được sử dụng để truy cập tài nguyên giao tiếp không dây như tin nhắn SMS (Short Message Service) và CBS (Cell Broadcast Service) và chúng độc lập vớp platform. Các messaging API dựa trên khung kết nối chung (Generic Connection Framework – GCF), được định nghĩa trong đặc tả CLDC.

Wireless Messaging API (WMA)thuộc JSR 120; là một gói tùy chọn cho các Java Platform Micro Edition (Java ME).

II.Tổng quan

Các giao thức messaging được giải thích trong tài liệu này, đó là:

  • Cell Broadcast Service (CBS)
  • Short Messaging Service (SMS)

Read more…

Managing Personal Information(PIM) – JSR 75-Phan2

IV.Cách thức tổ chức dữ liệu của PIM data

4.1.Trường(Field)

PIM items nhóm các field có liên quan với nhau. Các field được xác định bởi kiểu của PIMItem. Ví dụ, một item calendar event gồm có các trường: thời gian event bắt đầu và kết thúc, mô tả event, vị trí và những trường khác. Item address-book gồm các trường như: first name, last name, phone number, address, email address…Các field có một ID, một nhãn(label), các giá trị, các thuộc tính được minh họa như hình 1.
Các field được định danh duy nhất bởi một field ID. Các field IDs là các hằng(constants) được định nghĩa bởi các PIM item: Contact, Event và ToDo. Ví dụ, item Contact định nghĩa các trường như: Contact.NAME, Contact.ADDR…Ngoài ra, các field còn được phân biệt bởi field chuẩn hay mở rộng. Các field chuẩn là các field là các field chung, còn các field mở rộng là các field phát sinh trong quá trình implement PIM.

Để biết được các field được hỗ trợ trên thiết bị, sử dụng phương thức getSupportedField() cho từng PIM list cụ thể. Các field mở rộng cũng có thể dễ dàng xác định thông qua các giá trị field ID, bởi chúng thường lớn hơn hoặc bằng PIMItem.EXTENDED_FIELD_MIN_VALUE.

4.2.Nhãn(Label)

Label của một field là một chuối String dùng để mô tả một field. Để lấy label của một field, sử dụng phương thức getFieldLabel(int fieldID) của lớp PIMList.

4.3.Kiểu dữ liệu(Data type) Read more…