Luận văn Nghiên cứu hệ điều hành Symbian và xây dựng ứng dụng trên các thiết bị di động Nokia 9210

MỤC LỤC

Chương 1 Tổng quan đềtài . 12

1.1 Giới thiệu lĩnh vực và ý nghĩa đềtài. 12

1.2 Các kết quảnghiên cứu hiện nay vềlĩnh vực này . 14

1.3 Nội dung nghiên cứu của đềtài . 16

1.4 Tóm tắt kết quảcủa đềtài . 17

1.5 Bốcục luận văn. 18

Chương 2 Hệ điều hành Symbian . 19

2.1 Lịch sử. 19

2.2 Kiến trúc tổng quan của HDH Symbian . 20

2.3 Các đặc tính . 21

2.4 Các thiết kếcủa HDH Symbian . 23

2.5 Kĩthuật chung(Generic Technology-GT) đểphát triển hệ điều hành Symbian . 26

2.5.1Base. 27

2.5.2Framework . 29

2.5.3Communications . 30

2.5.4Messaging . 32

2.5.5Browsing . 32

2.5.6Application Engines. 33

2.5.7Java runtime . 34

2.5.8Connectivity. 35

2.6 Các hàm APIs của HDH Symbian . 36

2.6.1Trao đổi thông điệp. 37

2.6.2TCP/IP và sockets API . 37

2.6.3Communication API(các hàm vềgiao tiếp). 37

2.6.4Các ứng dụng và dịch vụ. 38

2.6.5Symbian là một hệ điều hành đa nhiệm:. 38

2.6.6Các mã lệnh (code) có thểdùng lại được. . 40

Chương 3 Vấn đềvềphát triển ứng dụng trên hệ điều hành Symbian . 41

3.1 Bộnhớtrong Symbian phone . 41

3.2 Kiến trúc của 1 phần mềm trên Symbian. 42

3.2.1Kiến trúc thưviện : (Library Architecture). 42

3.2.2Kiến trúc lớp của ứng dụng : (Application Class Architecture) . 44

3.3 Các ngôn ngữcó thểdùng phát triển ứng dụng trên HDH Symbian . 46

3.3.1Phát triển ứng dụng bằng C++:. 47

3.3.2Phát triển ứng dụng bằng Java . 48

3.3.3Phát triển ứng dụng bằng WAP và HTML: . 49

Chương 4 Xây dựng ứng dụng VNSmartType . 50

4.1 Giới thiệu . 50

4.2 Các chức năng. 50

KHOA CNTT – ĐH KHTN

8

4.3 Kỹthuật chạy nền (Background) . 53

4.4 Kỹthuật bắt phím . 54

4.5 Xửlý Tiếng Việt . 60

4.6 Tổchức lưu trữdữliệu . 64

4.7 Chức năng AutoComplete. 70

4.8 Chức năng AutoCorrect . 72

4.9 Chức năng thêm dấu tự động (Automatic AddAccents). 74

4.10 Chức năng xoá dấu (Remove Accents). 77

4.11 Các chức năng khác . 78

Chương 5 Cài đặt và thửnghiệm . 79

5.1 Tìm hiểu DTDD Nokia 9210 . 79

5.1.1Giới thiệu . 79

5.1.2Các tính năng chính của Nokia: . 80

5.1.3Cấu trúc của Nokia . 81

5.2 Cách biên dịch 1 chương trình. 82

5.3 Cài đặt một chương trình vào Emulator . 83

5.4 Cài đặt một chương trình vào máy Nokia 9210. 84

5.5 Cài đặt & Sửdụng ứng dụng VNSmartType trên máy Nokia 9210 . 85

Chương 6 Tổng kết & Đánh giá . 96

Phần phụlục. 101

A.Tìm hiểu thêm vềNokia 9210 . 101

B.Tiếng Việt Unicode . 116

C. Công cụMEAD(Minimal Eikon Application Development) . 121

D. Công cụMenu Builder. 122

E. Tìm hiểu trình giảlập Symbian 6.0 EPOC . 122

F. Tra cứu API phát triển ứng dụng . 123

G. Hướng dẫn từng bước (Tutorial) . 126

Thuật ngữ131

Tài liệu tham khảo . 133

pdf133 trang | Chia sẻ: netpro | Ngày: 08/04/2013 | Lượt xem: 1059 | Lượt tải: 2download
Bạn đang xem nội dung tài liệu Luận văn Nghiên cứu hệ điều hành Symbian và xây dựng ứng dụng trên các thiết bị di động Nokia 9210, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
p của ứng dụng KH OA C NT T – Đ H KH TN Chương 3 Vấn đề phát triển ứng dụng trên Symbian 45 Chẳng hạn có CExample- là tên của ứng dụng, được viết bởi lập trình viên. Các lớp CEik- được cung cấp bởi Uikon Core API. CCoeControl và CCoeAppUi thuộc về UI Control Framework. CApaDocument và CApaApplication thuộc về AppArc. Trong đó: o Lớp application định nghĩa các thuộc tính của ứng dụng: UID, tiêu đề và tạo mới một document. o Lớp document trình bày mô hình dữ liệu cho ứng dụng. Trong các ứng dụng về tập tin, nó thực hiện các thao tác đọc/ghi dữ liệu. Nó tạo một yêu cầu của tài liệu bằng cách tạo appUI. o appUi là nơi tập trung các lớp giao diện. Nó tạo và sở hữu các control để hiển thị dữ liệu, và bắt tất cả các sự kiện từ control. o AppView có thể xem như là một control để hiện thị dữ liệu và tương tác người dùng. Một ứng dụng phức tạp có thể có nhiều cách để hiển thị dữ liệu, do đó sẽ có nhiều view. Tuy nhiên đối với kiến trúc này thì có một số điểm cần lưu ý khi lập trình : o Sự phân cách giữa xử lý dữ liệu và hiển thị dữ liệu. o Sự thống nhất giữa xử lý file và các tài liệu. o Có thể nhúng ứng dụng khác vào ứng dụng hiện thời. o Hướng sự kiện. Như vậy thì cấu trúc của một ứng dụng có thể biểu diễn như trong sơ đồ sau : KH OA C NT T – Đ H KH TN Chương 3 Vấn đề phát triển ứng dụng trên Symbian 46 Hình 3-5 Liên hệ giữa các thành phần trong kiến trúc của ứng dụng Trình tự thực hiện các thành phần trong ứng dụng là : Application tạo một document, rồi đến lượt document tạo App UI, AppUI tiếp tục tạo View. Khi AppUI nhận lệnh (command), AppView nhận và hiển thị dữ liệu. Document chứa mô hình được hiển thị bởi view. 3.3 Các ngôn ngữ có thể dùng phát triển ứng dụng trên HDH Symbian Phần mềm viết trên HDH Symbian, version 6.0 có thể được phát triển bằng 4 ngôn ngữ: o EPOC C++ : HDH Symbian được viết bằng C++. Do đó, dùng EPOC C++ thì rất hiệu quả và có thể truy cập đến tất cả các hàm APIs mà HDH Symbian có cung cấp. o Java: Java 2, Micro Edition, với rich profiles. PersonalJava 3.0 bao gồm trọn bộ đầy đủ hệ quản lý dữ liệu Java và các hàm APIs cho giao tiếp, đồ họa AWT. JavaPhone 1.0 cung cấp khả năng truy cập ở các KH OA C NT T – Đ H KH TN Chương 3 Vấn đề phát triển ứng dụng trên Symbian 47 thiết bị không dây, chẳng hạn như contacts, schedule, telephony, power monitoring …. o WAP: HDH Symbian version 6.0 cài đặt WAP version 1.1 communication stacks và browsers standars o HTML: trình duyệt web của Symbian version 6.0 cài đặt HTML 3.2 với đầy đủ bộ khung, HTTPS và nhúng Java applets. 3.3.1 Phát triển ứng dụng bằng C++: Mã nguồn cho 1 project viết bằng C++ bao gồm: o C++ source file( .cpp, .h) o tập tin nguồn cho resource của chương trình ( resource files, bitmap, icons) o những tập tin hệ thống của project: tập tin chứa thông tin xây dựng (bld.inf), 1 hay nhiều makefile specifications ( .mmp) SDK của cả Quartz và Crystal của Symbian cung cấp các công cụ để xây dựng chương trình bằng C++: o công cụ xây dựng các makefiles và điều khiển các tác vụ mà được điều khiển bời tiến trình xây dựng (build process). o công cụ để chuyển makefile specifications thành makefile hay workspace của Visual C++ IDE. o Trình biên dịch GNU C++, phiên bản 98r2, thiết kết riêng cho các yêu cầu của EPOC và xây dựng các chương trình cho các máy hoạt động dựa trên ARM. o Trình biên dịch và chuyển đổi các resources của chương trình (resource files, bitmap, icons) o Help compiler KH OA C NT T – Đ H KH TN Chương 3 Vấn đề phát triển ứng dụng trên Symbian 48 o Công cụ trợ giúp thường trú, để chuyển phần trợ giúp viết cho EPOC R5 thành cho Quartz và Crystal. o tập tin cài đặt từ hệ thống cài đặt của Symbian. o App wizard o GUI icon và application information file builder. o Perl, ngôn ngữ scripting được dùng bởi rất nhiều công cụ. Để xây dựng và debug chương trình bằng mày giả lập thì cần phải có Microsoft Visual C ++,version 6.0. 3.3.2 Phát triển ứng dụng bằng Java Mã nguồn cho 1 project viết bằng Java bao gồm: o Java source file( .java) o Các tập tin cần thiết cho việc xác định ứng dụng sẽ được cài đặt như thế nào ( .app, .txt) o Sử dụng JavaDoc cho việc documeting APIs và implemention. SDK của cả Quartz và Crystal của Symbian cung cấp các công cụ để xây dựng chương trình bằng Java: o batch files để xây dựng các tập tin JAR cho các máy giả lập. o GUI icon và application information file builder. o GUI icon và application information file builder, như trong C++, nhưng có hổ trợ riêng cho các yêu cầu của Java. o tập tin cài đặt từ hệ thống cài đặt của Symbian. Để xây dựng và debug chương trình bằng mày giả lập thì cần phải có môi trường lập trình Java chuẩn. Còn để phát triển và debug bằng phương pháp Java nguyên thủy cần có SDK của Quarzt hay Crystal C++: SDKs cho Java bao gồm phần bổ KH OA C NT T – Đ H KH TN Chương 3 Vấn đề phát triển ứng dụng trên Symbian 49 sung C++ SDKs chứa phần hổ trợ cho build-time của phương phát Java nguyên thủy. Ta vẫn có thể dùng thư viện của Java mà không cần SDKs của C++. Ngoài ra, SDKs của quarzt và Crystal cung cấp hổ trợ đầy đủ cho việc xây dựng các ứng dụng. 3.3.3 Phát triển ứng dụng bằng WAP và HTML: Cũng có thể nhưng rất hiếm khi dùng 2 ngôn ngữ này để xây dựng phần mềm trên HDH Symbian.Cách làm cũng giống như C++ và Java: o viết trang HTML hay WML o sao chép những trang này đến thư mục thích hợp trong máy giả lập. o dùng ứng dụng WAP hay WEB trên mày giả lập để biên dịch các trang này. o sửa lại cho thật đúng và biên dịch những trang này trên máy giả lập. o dùng hệ thống cài đặt để cài đặt những trang này trên thiết bị thật. Thường thì người ta phát triển nội dung HTML và Wap bằng server và sau đó biên dịch trên thiết bị thật. Các thiết bị dùng HDH Symbian, và máy giả lập đều có thể nối mạng nội bộ với nhau bằng cách dùng Windows NT Remote Access Services (RAS), để giảm bớt giá thành kiểm tra và tăng tốc độ kiểm tra lên. KH OA C NT T – Đ H KH TN Chương 4 Xây dựng ứng dụng VNSmartType 50 Chương 4 Xây dựng ứng dụng VNSmartType 4.1 Giới thiệu Ý tưởng : Như đã đề cập ở chương 1, với các thiết bị cầm tay thông minh như Pocket PC, smartphone nói chung, hệ điều hành Symbian 6.0 và Nokia 9210 nói riêng dường như chưa có một ứng dụng hỗ trợ soạn thảo Tiếng Việt hoàn chỉnh. Một bộ gõ Tiếng Việt, một số chức năng sao cho gõ soạn thảo nhanh chóng tiện lợi đối với những người sử dụng dạng điện thoại Crystal3 vẫn còn là điều mơ ước. Với các phím bấm tương đối nhỏ, soạn thảo không thể nhanh, việc có các chức năng hỗ trợ quả là rất quý giá và tiện lợi vô cùng. Đó là những ý tưởng ban đầu để hình thành nên VNSmartType. Một bộ gõ Tiếng Việt hoàn chỉnh, không những thế mà còn là một công cụ hỗ trợ soạn thảo đa dụng, dường như bạn không cần phải gõ từng chữ một với nhiều dấu rườm rà phức tạp vốn là đặc thù của Tiếng Việt. 4.2 Các chức năng Trước hết VNSmartType phải là một bộ gõ tiếng việt, tương tự như Vietkey hay Unikey trên PC. Với vai trò là “một bộ gõ tiếng Việt”, VNSmartType phải hỗ trợ các kiểu gõ tiếng Việt khác nhau như chúng ta đã biết trên PC, đó là 3 kiểu gõ thông dụng nhất hiện nay4: VNI TELEX VIQR Và hỗ trợ toàn bộ bằng bảng mã Unicode (đây có thể xem là một trong những đặc tính mạnh mẽ của hệ điều hành Symbian 6.0). Với 3 kiểu gõ thông dụng này hầu 3 Dạng điện thoại có phần cứng tương tự máy tính cá nhân 4 Chi tiết về các kiểu gõ xin mời tham khảo phần phụ lục. KH OA C NT T – Đ H KH TN Chương 4 Xây dựng ứng dụng VNSmartType 51 như đã đáp ứng nhu cầu của người dùng, đặc biệt cho người dùng cảm giác gần gũi với chiếc máy tính cá nhân quen thuộc. Tuy nhiên, không phải không có những trở ngại, chúng ta hãy xem lại hình minh hoạ sau đây : Hình 4-1 DTDD Nokia 9210 Dễ dàng nhận thấy với Nokia 9210, sự hạn chế về các thiết bị là rất rõ ràng: bàn phím nhỏ, khó bấm, một số nút để soạn thảo nhanh trong PC bị lược bỏ, chính vì vậy dù đã hỗ trợ soạn thảo tiếng Việt khá hoàn chỉnh thì người dùng vẫn cảm thấy thật sự khó khăn khi thao tác. Chính vì vậy, một bộ gõ tiếng Việt cũng chưa thể khắc phục những hạn chế mà thiết bị đem lại cho người dùng. Vậy chúng ta cần gì ? Chúng ta cần một chức năng có khả năng tự động hoàn chỉnh từ khi chúng ta chỉ đánh một vài từ đầu tiên (AutoComplete). Ví dụ chỉ cần đánh từ “ph” sẽ cho chúng ta một loạt các từ bắt đầu bằng “ph” như “phở gà”, ”phong thuỷ”, ”phương án”, ”phi vật thể”, ”phiếu thu tiền”…, và chỉ cần nhấn một phím, ta sẽ có được từ mình mong muốn. KH OA C NT T – Đ H KH TN Chương 4 Xây dựng ứng dụng VNSmartType 52 Chúng ta cần một chức năng có thể viết ra một từ thật dài mà ta thường hay dùng khi ta chỉ đánh một từ tắt của nó(AutoCorrect), ví dụ chúng ta chỉ cần đánh “it” lập tức cụm từ “dài ngoằn nghèo” “information technology” hay “Công nghệ thông tin” sẽ xuất hiện. Nhận xét : Với 2 chức năng trên, chúng ta cảm thấy vô cùng tiện lợi và không cần phải gõ quá nhiều, việc này có ý nghĩa thật quan trọng trong thời đại công nghệ hiện nay khi công việc luôn dồn dập cấp bách và cần sự ngắn gọn, tiện lợi, nhanh chóng. Tiến xa hơn một bước, với Tiếng Việt chúng ta thường mất công bỏ các loại dấu khác nhau như huyền, sắc, ngã, hỏi, nặng… Việc ấy càng mất công khi thiết bị cầm tay vốn là quá nhỏ. Với AutoComplete và AutoCorrect chúng ta không cần đánh nhiều nhưng chúng ta cũng không thể lưu tất cả những từ của Tiếng Việt được, đó là chuyện không thể vì hạn chế về bộ nhớ xử lý…. Hai chức năng cơ bản trên chỉ hỗ trợ “những từ chúng ta thường dùng nhất”, xin nhắc lại “thường dùng nhất” mà thôi chúng ta không thể lạm dụng lưu quá nhiều từ sẽ dẫn tới xử lý chậm và tốn hao bộ nhớ. Chính vì vậy VNSmartType hỗ trợ thêm chức năng “tự động thêm dấu văn bản” (Automatic Add Accents), đây là một chức năng khá thông minh, giúp chúng ta rất nhiều đặt biệt là khi có sự kết hợp với 2 chức năng hỗ trợ trên. Thử tượng tưởng thay vì chúng ta gõ “Cộng hoà xã hội chủ nghĩa Việt Nam” chúng ta chỉ cần gõ các chữ không dấu “Cong hoa xa hoi chu nghia Viet Nam” lập tức câu ấy sẽ được thêm các dấu Tiếng Việt nhanh chóng. Có chức năng thêm dấu văn bản thì cũng phải có chức năng xoá dấu văn bản (Automatic Remove Accents), nhiều người nói rằng chức năng này vô lý quá, vì người Việt ai cũng muốn đọc văn bản có dấu chứ ai lại muốn đọc văn bản không dấu bao giờ ! Nhưng hãy nghĩ kỹ ! Với các đời điện thoại di động hiện nay, không phải máy nào cũng hỗ trợ Unicode, tức là rất nhiều máy không thể hiển thị tin nhắn Tiếng Việt, chính vì vậy nếu muốn gửi tin nhắn cho các loại máy khác nhau chúng ta nên có KH OA C NT T – Đ H KH TN Chương 4 Xây dựng ứng dụng VNSmartType 53 chức năng thêm dấu cũng như xoá dấu để các máy khác nhau đều nhận được tin nhắn đó. Càng quan trọng hơn nếu đó là một lời nhắn cấp bách ! Tóm lại : VNSmartType có các chức năng sau đây : - Bộ gõ Tiếng Việt hoàn chỉnh - “Bộ tứ” chức năng hỗ trợ thông minh : o AutoComplete o AutoCorrect o Automatic Add Accents o Automatic Remove Accents - Cùng với những chức năng người dùng khác như cho phép tìm, thêm xoá, sửa các từ trong list các từ của các chức năng….. 4.3 Kỹ thuật chạy nền (Background) Trước hết, một bộ gõ tiếng Việt phải đáp ứng các yêu cầu cần thiết sau : Chạy đồng thời với các chương trình khác, để bất cứ đang ở ứng dụng soạn thảo nào có hỗ trợ Unicode đều phát huy tác dụng được. Bắt được phím bấm của các chương trình khác để từ đó tuỳ biến xử lý hiển thị tiếng Việt. Như vậy việc cần làm của chúng ta là phải tìm kiếm API hỗ trợ việc chạy đồng thời với các chương trình khác (nói ngắn gọn là chạy nền – chạy background) và tìm cách bắt tất cả các phím của các ứng dụng đồng thời với bộ gõ của chúng ta. Việc chạy nền không quá khó khăn trong Symbian 6.0 vì hệ điều hành này đã hỗ trợ các API của lớp CAcitve được cụ thể hoá cho Dialog có tên là CancelDialog đã xây dựng sẵn. Đây là dialog được xây dựng kế thừa của lớp CActive, đối tượng được KH OA C NT T – Đ H KH TN Chương 4 Xây dựng ứng dụng VNSmartType 54 đóng gói để yêu cầu những dịch vụ không đồng bộ và để bắt tất cả các sự kiện. Sử dụng CancelDialog nhằm tạo thành 1 long running task dùng để chạy nền. Đây là một hỗ trợ vô cùng ý nghĩa đối với người lập trình vì các API hỗ trợ trong Symbian đều rất khó khăn cho người lập trình vì tính phức tạp và khó thử nghiệm, vì thế việc có sẵn vài lớp và ứng dụng, nhất là những vấn đề liên quan đến tương tác người dùng là vô cùng quý giá. Như vậy, chúng ta đã giải quyết được vấn đề thứ nhất là vấn đề chạy background nhờ sử dụng dialog có sẵn là CancelDialog của Symbian cung cấp. 4.4 Kỹ thuật bắt phím Như đã nói ở trên, việc bắt các phím của các ứng dụng khác là yêu cầu bắt buộc của một bộ gõ tiếng Việt. Symbian cung cấp một tập API phục vụ cho việc xen vào bắt các phím của các ứng dụng đang chạy, sử dụng cơ chế đồng hành của các tiến trình. Sau đây là một số khái niệm cũng như tổng quan một số lớp mà chúng ta sử dụng để xử lý bắt phím . (Chi tiết hơn xin tham khảo phần phụ lục). Window Server Session Khi một ứng dụng bắt đầu thì Symbian coi như đó là một session. Sesion này được quản lý bởi Window Server, do đó Window Server Session chính là nơi lưu trữ các thông tin về cửa sổ…Để lấy thông tin về cửa sổ ta có thể dùng các lớp thành viên của Window Server Client Side (tham khảo thêm trong SDK Documentation). Trong ví dụ này, chúng ta chỉ sử dụng lớp RWsSession và RWindowGroup.5 Window Group Khi một session bắt đầu thì các cửa sổ được xem như là một Window Group. Để quản lý các thông tin này Symbian dùng lớp RWindowGroup. 5 Chi tiết hơn xin tham khảo phần Phụ lục – RwsSession , RWindowGroup KH OA C NT T – Đ H KH TN Chương 4 Xây dựng ứng dụng VNSmartType 55 CActive, CActiveScheduler Một đối tượng được quản lý trong scheduler được gọi là “active object” và lớp để biểu diễn đối tượng này là CActive. Để diễn tả cho bộ điều phối, Symbian cung cấp lớp CActiveScheduler6. Cách bắt phím Để bắt được phím đầu tiên ta phải lấy được bộ điều phối (scheduler) của Symbian. Sau đó ta thêm vào scheduler hàm xử lý để bắt tất cả sự kiện phím rồi xử lý. Việc này cũng tương tự như Hook trên Windows.Để bắt sự kiện phím ta làm những bước sau : o Kết nối Window Server Session để lấy các thông tin về các cửa sổ. o Từ Window Server Session lấy Window Group. o Từ Window Group ta sẽ “capture” các phím mà cần phải xử lý. Sau các bước này, khi có sự kiện phím xảy ra mà phím này ta đang “capture” thì thông điệp này sẽ được gửi đến hàm xử lý. Sau đây là source code minh họa: // Khai báo lớp CKeyboardScheduler để lấy bộ scheduler. class CKeyboardScheduler : public CActiveScheduler { }; // Khai báo “active object” để chèn đối tượng này vào bộ điều phối (scheduler). class CLongProcess : public CActive { public: …. 6 Chi tiết hơn xin tham khảo phần Phụ lục – CactiveScheduler KH OA C NT T – Đ H KH TN Chương 4 Xây dựng ứng dụng VNSmartType 56 // hàm chính dùng để đăng ký và xử lý void ConstructL(); void RunL(); void CaptureASCIIiKey(); void CancelCaptureASCIIKey() ;….. private: ….. // các biến window server session, window group RWsSession iWs; RWindowGroup iWg; …. } Sau đây là bản cài đặt hoàn chỉnh : Void CLongProcess::ConstructL() { // con trỏ đến bộ điều phối sẽ lấy được CKeyboardScheduler* runner; // Kết nối tới window server User::LeaveIfError(iWs.Connect()); // Lấy window group của session KH OA C NT T – Đ H KH TN Chương 4 Xây dựng ứng dụng VNSmartType 57 iWg=RWindowGroup(iWs); // Tạo các thông số cần thiết cho window group User::LeaveIfError(iWg.Construct((unsigned long)this,EFalse)); // “Capture” các phím cần thiết CaptureASCIIkeys(); // Lấy bộ điều phối hiện thời, nếu chưa có install mới if(!CActiveScheduler::Current()) { Runner=new CKeyboardScheduler(); if (Runner) CKeyboardScheduler::Install(Runner); } else Runner=(CKeyboardScheduler*)CActiveScheduler::Current(); // Thêm đối tượng của chúng ta vào bộ điều phối. Runner->Add(this); } void CLongProcess::CaptureASCIIKey() { int i. j; // Các phím cần bắt từ FromKey->ToKey for (i=Fromkey;i<=Tokey;i++) { CapturedKeys[j]=iWg.CaptureKey(i,0,0); KH OA C NT T – Đ H KH TN Chương 4 Xây dựng ứng dụng VNSmartType 58 j++; } // bắt luôn 2 phím backspace và enter CapturedKeys[j]=iWg.CaptureKey(8,0,0); j++; CapturedKeys[j]=iWg.CaptureKey(13,0,0); } void CLongProcess :: CancelCaptureASCIIKey() { int i; for(i=0;i<=NoOfCapturedKeys;i++) iWg.CancelCaptureKey(CapturedKeys[i]); } // Hàm xử lý khi có sự kiện xảy ra void CLongProcess:RunL() { TWsEvent iWsEvent; int rFocus; // Lấy thông tin của sự kiện iWs.GetEvent(iWsEvent); TInt eventType=iWsEvent.Type(); // lấy window đang được focus KH OA C NT T – Đ H KH TN Chương 4 Xây dựng ứng dụng VNSmartType 59 rFocus=iWs.GetFocusWindowGroup(); // chỉ nhận sự kiện phím switch (eventType) { case EEventKey: // Đưa về sự kiện phím TKeyEvent& key = *iWsEvent.Key(); // tạm thời giải phóng các phím để tránh gửi lặp lại CancelCaptureASCIIKey(); // Xử lý Xử lý tiếng việt-phần 4 // Kết thúc xử lý, bắt lại các phím CaptureASCIIkeys(); default: break; } // gửi yêu cầu nhận sự kiện iWs.EventReady(&iStatus);} KH OA C NT T – Đ H KH TN Chương 4 Xây dựng ứng dụng VNSmartType 60 4.5 Xử lý Tiếng Việt Chúng ta đã chuẩn bị tất cả, 2 yêu cầu của một bộ gõ ta đã chuẩn bị xong, bây giờ việc còn lại là xử lý hiển thị tiếng Việt theo bảng mã Unicode. Phần xử lý tiếng Việt sử dụng một số mảng để lưu trữ các ký tự tiếng Việt, các ký tự có thể làm thay đổi dấu của kí tự khác theo kiểu đánh Telex7 (các kiểu đánh khác cũng tương tự nhưng chỉ thay đổi các ký tự làm đổi dấu), và các mảng lưu các ký tự tiếng việt được phân loại theo dấu của nó. _ToConvert_ch[NoToConvert]={'a','A','d','D','e','E','o','O','u','U','[',']','f','F','j','J','r','R', 's','S','x','X','z','w','W'}; Mảng vietchars gồm các ký tự: a, â, ă, e, ê, i, o, ô, ơ, u, ư, y; A, Â, Ă, E, Ê, I, O, Ô, Ơ, U, Ư, Y int _vietchars[24]= { 97, 226, 259, 101, 234, 105, 111, 244, 417, 117, 432, 121, 65, 194, 258, 69, 202, 73, 79, 212, 416, 85, 431, 89}; Mảng vietsac gồm các ký tự: cũng gồm các ký ở trên nhưng có thêm dấu sắc int _vietsac[24]= { 225, 7845, 7855, 233, 7871, 237, 243, 7889, 7899, 250, 7913, 253, 193, 7844, 7854, 201, 7870, 205, 211, 7888, 7898, 218, 7912, 221}; Mảng viethuyen gồm các ký tự: cũng gồm các ký ở trên nhưng có thêm dấu huyền int _viethuyen[24] ={ 224, 7847, 7857, 232, 7873, 236, 242, 7891, 7901, 249, 7915, 7923, 92, 7846, 7856, 200, 7872, 204, 210, 7890, 7900, 217, 7914, 7922}; Mảng vietnang gồm các ký tự: cũng gồm các ký ở trên nhưng có thêm dấu nặng 7 Tham khảo các kiểu đánh tiếng việt và bảng mã Unicode trong phần Phụ lục KH OA C NT T – Đ H KH TN Chương 4 Xây dựng ứng dụng VNSmartType 61 int _vietnang[24]={7841, 7853, 7863, 7865, 7879, 7883, 7885, 7897, 7907, 7909, 7921, 7925,7840, 7852, 7862, 7864, 7878, 7882, 7884, 7896, 7906, 7908, 7920, 7924}; Mảng viethoi gồm các ký tự: cũng gồm các ký ở trên nhưng có thêm dấu hỏi int _viethoi[24]= { 7843, 7849, 7859, 7867, 7875, 7881, 7887, 7893, 7903, 7911, 7917, 7927, 7842, 7848, 7858, 7866, 7874, 7880, 7886, 7892, 7902, 7910, 7916, 7926}; Mảng vietnga gồm các ký tự: cũng gồm các ký ở trên nhưng có thêm dấu ngã int _vietnga[24]= {227, 7851, 7861, 7869, 7877, 297, 245, 7895, 7905, 361, 7919, 7929,195, 7850, 7860, 7868, 7876, 296, 213, 7894, 7904, 360, 7918, 928}; Các hàm xử lý //Hàm này dùng để bắt các ký tự ASCII void CaptureASCIIkeys(); //Sử dụng hàm này để thôi không bắt các phím, để xử lý vừa nhận được. void CancelCaptureASCIIKey(); /*Kiểm tra ký tự ch có thể làm thay đổi kí tự trước hay không? Đó là các phím trong mảng _ToConvert_ch */ bool CanConvertOther(int ch); KH OA C NT T – Đ H KH TN Chương 4 Xây dựng ứng dụng VNSmartType 62 /*Hàm này : - trả về mảng kí tự tiếng việt mà có dấu do code_type tạo - nếu code_type là S thì trả về vietsac - nếu code_type là F thì trả về viethuyen - nếu code_type là R thì trả về viethoi - nếu code_type là X thì trả về vietnga - nếu code_type là J thì trả về vietnang - nếu code_type là z thì trả về vietchars*/ Int* PtrArray(char code_type): /*Hàm này: - trả về vị trí kí tụ buffer trong mảng chữ việt - lấy ra mảng chữ việt chứa buffer*/ Int InArray(char buffer): //Hàm này kiểm tra buffer có trong mảng vietchars không Bool inVietchars(char buffer) /*Hàm này : - Chuyển các ký tự đặc biệt của Telex như : [, ], w, W thành chữ ư,ơ - Các kí tự khác giữ nguyên*/ TInt DirectConvert(char ch); /*Hàm này : - kiểm tra xem buffer có làm thay đổi buffer - trả ra kí tự mới tạo thành và cờ hiệu cho việc có lưu kí tự mới vào buffer không*/ int vietunicode(int buffer,int code_type, int* return_char,bool* isRestore) KH OA C NT T – Đ H KH TN Chương 4 Xây dựng ứng dụng VNSmartType 63 //Hàm này gửi phím đến ứng dụng void sendkey(int Wgr,TWsEvent iWsEvent, char repeat,int mycode); //Hàm này Gửi ký tự delete đến ứng dụng void deletekey(int Wgr,TWsEvent iWsEvent); Bảng 4-1 Các hàm xử lý của bộ gõ tiếng Việt Thuật giải Hình 4-2 Thuật toán của bộ gõ tiếng Việt KH OA C NT T – Đ H KH TN Chương 4 Xây dựng ứng dụng VNSmartType 64 4.6 Tổ chức lưu trữ dữ liệu Để các chức năng hỗ trợ AutoComplete, AutoCorrect và Add Accents hoạt động ta phải lưu trữ dữ liệu là những từ do người dùng thêm vào trong quá trình sử dụng để khi cần có thể đánh nhanh, gõ tắt được. Cách tốt nhất để lưu trữ đối với các thiết bị di động là phải đảm bảo tính đơn giản dễ truy xuất và truy xuất phải nhanh chóng. Lưu trữ vào tập tin nhị phân là cách phù hợp đối với trường hợp Unicode như ứng dụng này. Ta sẽ lưu trữ vào file nhị phân toàn những số nguyên biểu thị là mã Unicode của các chữ cái. Lưu trữ 1 từ là việc lưu trữ một dãy số nguyên kết thúc bằng số đặc biệt -1. Giả sử lưu trữ chữ “học” ta phải lưu trữ 3 số nguyên biểu thị mã unicode của 3 chữ cái: “h” “ọ” và “c”, mã của 3 chữ “h”, ”ọ” và “c” lần lượt là 104, 7885, và 99. Như vậy lưu chữ “học” trong file sẽ lưu theo thứ tự như sau :104 7885 99 -1 với -1 là số kết thúc của một chữ cần lưu. Cứ như vậy muốn lưu bao nhiêu chữ thì ta lưu lần lượt như vậy. Còn phần xử lý chính là chúng ta sẽ lấy các số từ file lên rồi tái tạo lại thành từng từ theo cấu trúc sau : struct Word { int nChar; //số ký tự chứa trong 1 từ int charArr[MAXSIZE]; //mảng chứa mã unicode của từng ký tự } Chúng ta sẽ tái tạo toàn bộ từ những số lấy từ file và cho vào một mảng gồm các từ cần dùng và sau này các thao tác tìm, thêm, xoá ...đều chỉ lưu trên mảng. KH OA C NT T – Đ H KH TN Chương 4 Xây dựng ứng dụng VNSmartType 65 Kỹ thuật tổng quát về xử lý file (tập tin) trên Symbian Vấn đề đầu tiên phải ghi nhận là : việc xử lý file trên hệ điều hành Symbian khó khăn và phức tạp hơn rất nhiều so với việc xử lý file trên máy tính cá nhân. Xử lý file trên Symbian phải thông qua 2 giai đoạn chính : Giai đoạn tạo file : Đây là giai đoạn tạo mới cho file bao gồm việc tạo mới một file, và tạo “gốc” (root) cho file. Làm việc với file trên Symbian chúng ta cần làm quen với gốc (root) ,sau này mọi phần tử thêm ,tìm đều xử lý thông qua root này, với một id cho root được xem là duy nhất. Đoạn code minh hoạ sau sẽ nêu chi tiết của bước tạo file này. TParse filestorename; /* với aName là tên file do ta truyền vào ,ta dùng fsSession là một biến thuộc kiểu RFs ,làm việc như là một File Server ,dòng lệnh này chịu trách nhiệm phân tích tên file đưa vào thành file name kiểu TParse để xử lý*/ fsSession.Parse(aName,filestorename); // Khởi tạo đối tượng lưu trữ file ,dòng code này có nghĩa là tạo file mới với tên //truyền vào ,nếu file đã tồn tại thì ghi đè. CFileStore* store = CPermanentFileStore::ReplaceLC(fsSession, filestorename.FullName(), EFileRead|EFileWrite); // Bắt đầu thiết lập store root store->SetTypeL(store->Layout()); /* Tạo luồng cho lớp CItemArray , CItemArray là một lớp kế thừa từ Cbase được xem như linh hồn của file ,vì nó xử lý tất cả các thao tác như là lưu trữ ,thêm một item vào root ,xoá một item khỏi root…..*/ TStreamId id=CItemArray::CreateL(*store); //Tạo id cho root KH OA C NT T – Đ H KH TN Chương 4 Xây dựng ứng dụng VNSmartType 66 store->SetRoo

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

  • pdfTìm hiểu về hệ điều hành symbian và cách để xây dựng ứng dụng trên các thiết bị di động.pdf
Tài liệu liên quan