Tìm hiểu công nghệ Android - Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile

pdf 60 trang Gia Huy 16/05/2022 2020
Bạn đang xem 20 trang mẫu của tài liệu "Tìm hiểu công nghệ Android - Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdftim_hieu_cong_nghe_android_xay_dung_ung_dung_lich_van_su_van.pdf

Nội dung text: Tìm hiểu công nghệ Android - Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile

  1. ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC SƯ PHẠM KHOA TIN    Đề tài: Tìm hiểu cơng nghệ Android - Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile. KHĨA LUẬN TỐT NGHIỆP CỬ NHÂN KHOA HỌC GVHD : Lê Văn Mỹ SVTH : Nguyễn Thị Diễm Hương Đà Nẵng năm:2012
  2. LỜI CẢM N Em xin chân thành cảm thầy cơ trong khoa Tin học cũng như các thầy cơ giảng dạy trong trường Đại học Sư phạm – Đại học Đà N ng truy n ạt những kiến thức quý báu cho em trong những năm học vừa qua. Đặc biệt, Em xin chân thành cảm ơn thầy giáo Lê Văn Mỹ tận tình giúp ỡ, hướng dẫn và cung cấp tài liệu liên quan ến ồ án này. Xin chân thành cảm ơn các anh chị và các bạn trong khoa Tin học ủng hộ, giúp ỡ, chia sẻ kiến thức, kinh nghiệm và tài liệu cĩ ược cho em trong quá trình nghiên cứu và thực hiện tài. Một lần nữa em xin chân thành cảm ơn ! Đà N ng, ngày 07 tháng 05 năm 2012 Sinh viên thực hiện Nguyễn Thị Diễm Hương
  3. LỜI CAM ĐOAN Em xin cam oan : 1 Những nội dung trong luận văn này là do em thực hiện dưới sự hướng dẫn trực tiếp của Thầy giáo Lê Văn Mỹ. 2 Mọi tham khảo dùng trong luận văn u ược trích dẫn rõ ràng tên tác giả, tên cơng trình, thời gian, ịa iểm cơng bố. 3 Mọi sao chép khơng hợp lệ, vi phạm quy chế ào tạo, hay gian trá, em xin chịu hồn tồn trách nhiệm. Sinh viên Nguyễn Thị Diễm Hương
  4. MỤC LỤC MỞ ĐẦU 1 L DO CHỌN Đ TÀI 1 2 MỤC TIÊU, NHIỆM VỤ 1 2.1 Mục tiêu 1 2.2 Nhiệm vụ 2 3 ĐỐI TƯỢNG, PHẠM VI NGHIÊN CỨU 2 3.1 Đối tượng 2 3.2 Phạm vi nghiên cứu 2 4 PHƯ NG PHÁP NGHIÊN CỨU 2 4.1 Về mặt lý thuyết 2 4.2 Cơng cụ xây dựng đề tài 3 5 NGHĨA KHOA HỌC, THỰC TIỄN CỦA Đ TÀI 3 5.1 Ý nghĩa khoa học 3 5.2 Ý nghĩa thực tiễn 3 6 BỐ CỤC 3 CHƯ NG : C SỞ L THU T 4 TỔNG QUAN V HỆ ĐI U HÀNH ANDROID 4 1.1 Lịch sử Android 4 1.2 Các phiên bản hệ điều hành Android (Android plaform) 5 1.3 Ứng dụng của Android và sự phát triển trong tương lai 6 2 KI N TRÚC HỆ ĐI U HÀNH ANDROID 7 2.1 Các thành phần cấu tạo nên Android (Android Architecture) 7 2.2 Activity 10 2.3 Broadcast receivers 14 2.4 DVM 15 3 LẬP TRÌNH ỨNG DỤNG ANDROID 15 3.1 Thiết lập mơi trường phát triển ứng dụng 15 3.2 Các thành phần trong Android Project 16 4 L THU T CỦA BÀI TỐN CHU ỂN ĐỔI NGÀ ÂM DƯ NG 18 4.1 Cơ sở lý thuyết t nh lịch âm Việt Nam 18 4.2 Các hàm cơ bản chuyển đ i ngày âm dương 20 CHƯ NG 2: PHÂN TÍCH HỆ THỐNG 24 S ĐỒ USE CASE 24 1.1 Sơ đ use case t ng quát 24 1.2 Mơ tả các ca sử dụng hay chức năng của nĩ 24 2 S ĐỒ TUẦN TỰ 25 2.1 Quá tr nh xem lịch âm dương 25 2.2 Quá tr nh xem tham khảo trong ngày 26 2.3 Quá tr nh xem tu i 27 2.4 Quá tr nh chọn ngày 29 2.5 Quá tr nh xem tử vi 30 3 TỔ CHỨC CÁC LỚP 31 3.1 Lớp ReadFileText 31 3.2 Lớp DateProcessing 31 3.3 Lớp CheckingForBuilding 32
  5. 3.4 Lớp MyDate 33 3.5 Các lớp giao diện 33 4 TỔ CHỨC C SỞ DỮ LIỆU 35 CHƯ NG 3: TRIỂN KHAI VÀ K T QUẢ CHẠ DEMO 36 MÀN HÌNH HIỂN THỊ LỊCH ÂM, LỊCH DƯ NG 36 2. MÀN HÌNH XEM THẢO TRONG NGÀ 37 3. MÀN HÌNH XEM TUỔI 38 4 MÀN HÌNH CHỌN NGÀ ÂM, NGÀ DƯ NG 39 5 MÀN HÌNH XEM TỬ VI 40 K T LUẬN VÀ HƯỚNG PHÁT TRIỂN 42 K T QUẢ ĐẠT ĐƯỢC 42 1.1. Về mặt lý thuyết 42 1.2 Về thực nghiệm 42 2 HẠN CH 42 3 HƯỚNG PHÁT TRIỂN Đ TÀI 43 PHỤ LỤC 44 TÀI LIỆU THAM KHẢO 51 TĨM TẮT LUẬN VĂN TỐT NGHIỆP 52
  6. DANH MỤC HÌNH ẢNH H nh 1.1. Biểu tượng cho một số phiên bản 5 H nh 1.2. Samsung Galaxy S II 6 H nh 1.3. Kiến trúc hệ điều hành Android 7 H nh 1.4. Activity Lifecycle 13 H nh 1.5. Tạo mới 1 ứng dụng Android 16 H nh 2.1. Sơ đ ca sử dụng t ng quát 24 H nh 2.2. Sơ đ tuần tự quá tr nh xem lịch âm dương 26 H nh 2.3. Sơ đ tuần tự quá tr nh xem nên kiêng trong ngày 26 H nh 2.4. Sơ đ tuần tự quá tr nh xem hướng xuất hành 27 H nh 2.5. Sơ đ tuần tự quá tr nh xem tu i làm nhà 27 H nh 2.6. Sơ đ tuần tự quá tr nh xem tu i kết hơn 28 H nh 2.7. Sơ đ tuần tự quá tr nh xem vận hạn của tu i 28 H nh 2.8. Sơ đ tuần tự quá tr nh chọn ngày dương 29 H nh 2.9. Sơ đ tuần tự quá tr nh chọn ngày âm 29 H nh 2.10. Sơ đ tuần tự quá tr nh xem tử vi đơng phương 30 H nh 2.11. Sơ đ tuần tự xem tử vi tây phương 30 H nh 2.12. Sơ đ d liệu 35 H nh 3.1. Màn h nh xem lịch dương 36 H nh 3.2. Màn h nh xem lịch âm 37 H nh 3.3. Màn h nh nên kiêng và hướng xuất hành trong ngày 37 H nh 3.4. Màn h nh chọn tu i, xem tu i làm nhà, kết hơn và vận hạn 38 H nh 3.5. Màn hình thơng tin về kết hơn, vận hạn, làm nhà 39 H nh 3.6. Màn h nh chọn ngày dương và hiển thị 39 H nh 3.7. Màn h nh chọn ngày âm và hiển thị 40 H nh 3.8. Màn h nh chọn tu i và xem t nh cách 40 H nh 3.9. Màn h nh chọn ch m sao và xem t nh cách 41
  7. DANH MỤC BẢNG Bảng 1.1: Bảng tiết kh 19 Bảng 2.1: Chức năng của t ng ca sử dụng 25 Bảng 2.2: Các phương thức lớp ReadFileText 31 Bảng 2.3: Các phương thức lớp ProcessDate 32 Bảng 2.4: Các phương thức lớp CheckingForBuilding 33 Bảng 2.5: Các phương thức lớp MyDate 33 Bảng 2.6: Các lớp giao diện cơ bản 34
  8. DANH MỤC TỪ VI T TẮT - User: người sử dụng - State: trạng thái - Menu: tr nh đơn - DVM: Dalvik virtual machine - JVM: Java virtual machine - JDK: Java Development Kit - API: Application Programming Interface - SDK: Software Development Kit - GPRS: General Packet Radio Service - WAP: Wireless Access Protocol - SOAP: Simple Object Access Protocol - UI: User Interface - VM: Virtual Machine - IDE: Integrated Development Environment - J2ME: Java 2 Micro Edition - ADT: Android Development Tools - J2SE: Java 2 Standard Edition
  9. MỞ ĐẦU. MỞ ĐẦU 1. L DO CHỌN Đ TÀI Hiện nay cĩ rất nhiều cơng nghệ mới phát triển song song với việc phát triển cơng nghệ thơng tin như Bluetooth, Wireless, WAP, SOAP, nhằm giúp cơng nghệ thơng tin ngày càng thân thiết với người dùng hơn. Một trong nh ng cơng nghệ gĩp phần khơng nhỏ trong việc kết nối con người với thơng tin cũng như con người với con người là cơng nghệ di động.Với tốc độ phát triển hiện nay và nh ng lợi ch to lớn của cơng nghệ di động, cĩ thể thấy nĩ cĩ ảnh hưởng rất lớn đến cuộc sống của con người. Khơng giống như trước đây nh ng chiếc điện thoại chỉ cĩ chức năng rất đơn giản là đàm thoại, điện thoại hiện nay c n cĩ thêm rất nhiều chức năng, ứng dụng khác như: email, truy cập Internet, video, nghe nhạc, chơi game, đ ng thời với nĩ là sự phát triển vũ bão của các dịch vụ gia tăng trên điện thoại di động dựa trên cơng nghệ WAP và SOAP. V nh ng lý do trên, em chọn đề tài “T m hiểu cơng nghệ Android - Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile” để làm luận văn tốt nghiệp. Việc xây dựng một ứng dụng như thế nhằm t m hiểu thêm một cơng nghệ mới trong lĩnh vực cơng nghệ di động và áp dụng nh ng kiến thức mà em đã được học ở trường trong thời gian qua để áp dụng vào thực tiễn với mong muốn s gĩp phần giải quyết một số nhu cầu cần thiết cho người sử dụng điện thoại di động. 2. MỤC TIÊU, NHIỆM VỤ 2.1 Mục tiêu Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile cho điện thoại di động sử dụng hệ điều hành Android cĩ một số chức năng như sau: Hiển thị lịch dương, xem ngày âm lịch, giờ hồng đạo. Xem tu i để làm nhà, kết hơn, vận hạn. Một số tham khảo trong ngày NGU ỄN THI DIỄM HƯ NG – 08CNTT02 Trang 1
  10. Chọn một ngày dương hay một ngày âm bất k . Xem tử vi đơng phương, tây phương. 2.2 Nhiệm vụ T m hiểu cơng nghệ Android T m hiểu các thuật tốn t nh ngày âm, ngày dương Lưu d liệu dưới dạng các file text 3. ĐỐI TƯỢNG, PHẠM VI NGHIÊN CỨU 3 Đối tượng Lịch vạn sự vạn niên thế kỉ XXI và các điện thoại cĩ hệ điều hành Android 3.2 Phạm vi nghiên cứu Ứng dụng trên các thiết bị di động sử dụng trên hệ điều hành Android 1.6. Lịch vạn niên cĩ các khả năng sau: Xem tử vi của nam và n Xem tham khảo trong ngày Xem bằng 2 loại màn hình: kích cỡ 380px và 420px 4. PHƯ NG PHÁP NGHIÊN CỨU 4.1 Về mặt lý thuyết T m hiểu lý thuyết về các thiết bị di động, các ngơn ng cũng như các cơng nghệ để xây dựng các ứng dụng đĩ. T m hiểu các thuật tốn chuyển đ i lịch âm dương, thu thập các d liệu về tử vi, các phong tục xem ngày tốt xấu. Đưa ra một số định hướng để phát triển đề tài. Trang 2
  11. 4.2 Cơng cụ xây dựng đề tài Cơng cụ nghiên cứu cơ sở lý thuyết: các tài liệu tham khảo như các sách ngơn ng lập tr nh, các giáo tr nh, các Ebook, các trang web lập tr nh cho thiết bị di động và lý thuyết mang t nh tham khảo trong cuộc sống Cơng cụ thiết kế phần mềm: Eclipse, Android SDK, ADT plugin, J2SE. 5. NGHĨA KHOA HỌC, THỰC TIỄN CỦA Đ TÀI 5 nghĩa khoa học Củng cố các kiến thức đã học Nghiên cứu và nắm bắt được nền tảng lập tr nh trên hệ điều hành android. Sử dụng thành thạo một số cơng cụ hỗ trợ trong mơi trường làm việc. Nâng cao khả năng lập trình, giải quyết vấn đề 5 2 nghĩa thực tiễn Tạo một ứng dụng giúp mọi người cĩ thể giải tr , tham khảo trên điện thoại cĩ hệ điều hành Android với giao diện trực quan. 6 BỐ CỤC Với kết quả dự kiến đạt được của ứng dụng, luận văn được t chức thành 3 chương. Cụ thể như sau: Chương 1 Cơ sở lý thuyết: giới thiệu t ng quan về cơng nghệ di động, ngơn ng lập tr nh, thuật tốn chuyển đ i ngày âm dương. Chương 2. Phân tích hệ thống: phân t ch các chức năng của hệ thống, t đĩ thiết kế cho các chức năng và t chức d liệu. Chương 3: Triển khai và kết quả demo: kết quả chạy demo các chức năng của chương tr nh. Kết luận. Kết luận và hướng phát triển: nêu ra các nhận xét về kết quả đạt được và một số phương hướng phát triển tiếp theo của đề tài. Trang 3
  12. CHƯ NG CHƯ NG 1: C SỞ L THU T 1. TỔNG QUAN V HỆ ĐI U HÀNH ANDROID 1.1 Lịch sử Android “Máy t nh ngày càng trở nên “thân thiện” với con người hơn và ngày càng trở nên tiện dụng hơn, ở bất k nơi đâu và bất k lúc nào” – Y.HASHIMI & SATYA KOMATINENI (Pro Android Book – 2009 ). Tháng 7 năm 2005, Google mua lại Android Inc, đĩ là tên một dự án do một số cơng ty nhỏ thành lập cĩ trụ sở tại Palo Alto, California, USA. Nh ng nhà đ ng sáng lập nên Android được chuyển sang làm việc tại Google trong đĩ cĩ Andy Rubin ( đ ng sáng lập cơng ty Danger ), Rich Miner (đ ng sáng lập cơng ty Wildlife Communication), Nick Sears (t ng là phĩ chủ tịch T-Mobile) và Chris white (trưởng nhĩm thiết kế và phát triển giao diện tại WebTV) . Tại thời điểm đĩ cĩ rất t thơng tin về dự án Android, ngoại tr việc họ đang phát triển phần mềm cho điện thoại di động. Ở trụ sở của Google, nhĩm do Rubin đứng đầu đã phát triển một nền tảng thiết bị di động dựa trên nhân Linux. Đến tháng 9 năm 2007, InformationWeek đăng tải một nghiên cứu của Evalueserve cho biết Google đã nộp đơn xin cấp bằng sáng chế trong lĩnh vực điện thoại di động. Ngày 5 tháng 11 năm 2007, Liên minh thiết bị cầm tay mở rộng OHA (Open Handset Alliance) bao g m nhiều cơng ty trong đĩ cĩ Google, HTC, Intel, LG, Motorola, Nvidia, Qualcomm, Samsung Elecstronic, T-Mobile, Sprint Nextel, Tập đồn Marvell Technology, Texas Instruments, Tập đồn Broadcom được thành lập với mục đ ch phát triển các tiêu chuẩn mở cho thiết bị di động, cùng với việc thành lập OHA, họ đ ng thời giới thiệu Android một nền tảng cho thiết bị di động được xây dựng trên nhân Linux version 2.6. NGU ỄN THỊ DIỄM HƯ NG – 08CNTT02 Trang 4
  13. T m hiểu cơng nghệ Android -Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile 1.2 Các phiên bản hệ điều hành Android (Android plaform) Hình 1.1 Biểu tượng cho một số phiên bản Trang 5
  14. T m hiểu cơng nghệ Android -Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile 1.3 Ứng dụng của Android và sự phát triển trong tương lai Android chỉ mới hiện diện trên thị trường Mobile vào năm 2008 nhưng đã cĩ nh ng bước tiến vượt bậc trong lĩnh vực phát triển ứng dụng cho thiết bị Mobile và Smartphone. Tuy là một nền tảng đi sau nhưng số lượng ứng dụng Android tăng nhanh chĩng t năm 2008 đến tháng 1 năm 2012 th số ứng dụng của Android lên đến 430.000 ứng dụng. Các hãng sản xuất thiết bị di động như Samsung, HTC, Motorola, LG, Acer, Sony đã cĩ hướng chọn việc phát triển các thiết bị di động của m nh chạy hệ điều hành Android làm chiến lược. Mặc dù hầu hết các ứng dụng hiện trên Google Play đa số là miễn ph (72 % ) nhưng bù lại Android lại đang cĩ đơng đảo người sử dụng ưa th ch cho đến hiện tại và số lượng s c n tiếp tục tăng trong tương lai. Bên cạnh đĩ sự ra mắt của các d ng sản phẩm Smartphone chạy nền Android gần đây như sự bùng n mạnh m của cơng nghệ này, chứng tỏ vai tr của m nh trong thế giới thiết bị thơng minh. Lấy dẫn chứng cụ thể hãng điện thoại Samsung v a cho ra mắt chiếc điện thoại Samsung Galaxy SII chạy hệ điều hành Android 2.3 vào ngày 22 tháng 3 năm 2011 và đã được nâng cấp lên hệ điều hành 4.0.3. Hình 1.2 Samsung Galaxy S II Trang 6
  15. T m hiểu cơng nghệ Android -Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile Đầu tháng 4 năm 2012 Google cho phát hành phiên bản SDK r19 hỗ trợ cơng cụ phát triển ứng dụng cho nền tảng Android 4.0, một nền tảng mới đầy hứa hẹn mở ra kỷ nguyên cho các thiết bị thơng minh và tablet. Đặc biệt hơn phiên bản này đã được cài đặt trên một số d ng máy của Samsung và HTC. 2 KI N TRÚC HỆ ĐI U HÀNH ANDROID 2.1 Các thành phần cấu tạo nên Android (Android Architecture) Hình 1.3 Kiến trúc hệ điều hành Android 2.1.1 Tầng Application Android cung cấp bộ ứng dụng cốt lõi bao g m một ứng dụng email, chương tr nh tin nhắn SMS, lịch, bản đ , tr nh duyệt, địa chỉ liên hệ, Tất cả các ứng dụng được viết bằng ngơn ng lập tr nh Java. 2.1.2 Tầng Application Framework Bằng cách cung cấp một nền tảng phát triển mở, Android cung cấp cho các nhà phát triển, lập tr nh viên khả năng xây dựng các ứng dụng vơ cùng phong Trang 7
  16. T m hiểu cơng nghệ Android -Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile phú và sáng tạo. Các nhà phát triển, lập tr nh viên cĩ thể tự do tận dụng các thiết bị phần cứng, thơng tin địa điểm truy cập, chạy các dịch vụ nền, thiết lập hệ thống cảnh báo,thêm các thơng báo trạng thái và nhiều hơn n a. Các lập tr nh viên cĩ tồn quyền truy cập đến các API trong cùng một Framework, thường được sử dụng bởi các ứng dụng cơ bản. Kiến trúc của tầng ứng dụng được thiết kế đơn giản cho việc tái sử dụng các thành phần; bất k ứng dụng nào cũng cĩ thể publish và các ứng dụng khác cĩ thể sử dụng chúng. Cơ chế này cho phép các thành phần tương tự được thay thế bởi người dùng. Tất cả các ứng dụng cơ bản là một tập hợp các dịch vụ và các hệ thống, bao g m: Cĩ nhiều thành phần phong phú và mở rộng cho việc thể hiện (Views) UI và xây dựng ứng dụng như List, Grid, Text box, Button và thậm chí các mã nhúng cho một trình duyệt web. Content Providers cho phép các ứng dụng cĩ thể truy cập d liệu t nh ng ứng dụng khác ( như là Contact) hoặc để chia sẻ d liệu với các ứng dụng khác. Một Resource Manager cung cấp truy cập đến các tài nguyên Phi Mã (Non-code) như Strings, Graphic, và các file Layout. Một Notification Manager cho phép tất cả các ứng dụng hiển thị nh ng thơng báo trên thanh trạng thái. Một Activity Manager thì quản lý v ng đời của một ứng dụng và cung cấp một Navigation Backstack ph biến. 2.1.3 Tầng Libraries Android cài đặt một số thư viện C/C++ được sử dụng bởi nhiều thành phần khác nhau của hệ thống Android. Một số thư viện cơ bản được liệt kê dưới đây: System library C – cĩ ngu n gốc t thư viện chuẩn của C (libc) được chỉnh để nhúng vào các thiết bị dựa trên Linux. Thư viện media dựa trên PacketVideo’s OpenCore; thư viện này hỗ trợ playback và record nhiều định dạng audio và video ph biến, Trang 8
  17. T m hiểu cơng nghệ Android -Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile cũng như định dạng của một số ảnh bao g m MPEG4, H.246, MP3, AAC, AMR, JPG và PNG. Sureface Manager: quản lý truy cập để hiển thị các subsystem và seamlessly Libwebcore một engine web mạnh m chứa nh ng t nh năng của trình duyệt web Android và trình duyệt web nhúng. SGL cĩ các thư viện hỗ trợ cho lập trình 2D 3D Libraries OPEN GL hỗ trợ cho lập trình 3D Freetype SQLite một cơ sở d liệu nhỏ gọn nhưng mạnh m cho tất cả các ứng dụng. 2.1.4 Tầng Android Runtime Android bao g m một tập hợp các thư viện cơ bản cung cấp hầu hết các chức năng cĩ sẵn trong các thư viện lõi của ngơn ng lập tr nh Java. Mỗi ứng dụng Android chạy trong quá tr nh riêng của nĩ với trường hợp riêng của m nh, của máy ảo Dalvik. Dalvik được viết sao cho thiết bị cĩ thể chạy nhiều máy ảo (VMs) một cách hiệu quả. Các máy ảo Dalvik thực thi các file trong một Dalvik Executable (.dex) được tối ưu hĩa trong bộ nhớ một cách tối thiểu. VM dựa trên đăng ký và chạy các lớp được biên dịch bởi tr nh biên dịch ngơn ng Java mà được chuyển đ i thành định dạng file .dex bởi các cơng cụ “dx”. Các máy ảo Dalvik dựa trên nhân Linux cho các chức năng cơ bản như lu ng và quản lý bộ nhớ ở mức độ thấp. 2.1.5 Linux Kernel Android được xây dựng dựa trên Linux phiên bản 2.6 cho hệ thống bao g m các dịch vụ cốt lõi như bảo mật, quản lý bộ nhớ, quản lý tiến tr nh, mạng ngăn xếp (network stack) và mơ h nh điều khiển (driver model) . Hạt nhân (Kernel) cũng hoạt động như một lớp tr u tượng hĩa gi a phần cứng và phần c n lại của phần mềm ngăn xếp. Trang 9
  18. T m hiểu cơng nghệ Android -Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile 2.2 Activity  Activity là gì? Activity là một thành phần cơ bản của ứng dụng Android. Mỗi activity thực hiện một chức năng của ứng dụng, trong một ứng dụng Android luơn cĩ một MainActivity, khi ta chạy ứng dụng th Activity này được gọi thực thi trước và thể hiện nh ng giao diện hay các control lên màn h nh để người dùng cĩ thể tương tác. Một ứng dụng thường bao g m nhiều activity cĩ mối liên quan với nhau, và các activity này hoạt động theo cơ chế hàng đợi ( queue mechanism ) cĩ nghĩa khi một activity đang hoạt động nhưng một activity khác được k ch hoạt hoặc activity đĩ cĩ độ ưu tiên lớn hơn (priority) th activity trước đĩ s chuyển sang trạng thái Stop hoặc Pause để activity này thực hiện.  Tạo một Activity Để tạo một activity bạn cần tạo một lớp con kế th a t lớp Activity. Trong lớp con bạn cần thực hiện các phương thức callback (callback method) mà hệ thống s thực hiện khi chuyển đ i gi a các activity trong v ng đời của nĩ, bao g m các trạng thái như Khởi tạo, D ng, Chạy lại hay Ng ng hẳn. Trong đĩ cĩ 2 phương thức hay dùng nhất là: Tên phương thức Mơ tả onCreate() Phương thức này dùng để khởi tạo một Activity, ở trong phương thức này bạn nên khởi tạo các thành phần thiết yếu cho activity đĩ. Quan trọng nhất là bạn phải gọi câu lệnh setContentView() để định nghĩa layout cho activity đĩ. onPause() Hệ thống s gọi phương thức này khi người dùng chuyển sang một activity khác. Bạn cĩ thể thêm nh ng câu lệnh hay gọi activity khác khi điều này xảy ra. Trang 10
  19. T m hiểu cơng nghệ Android -Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile  Thực hiện một giao diện người dùng Giao diện người dùng cho một hoạt động được cung cấp bởi một hệ thống các quan điểm, đối tượng dẫn xuất t lớp View. Mỗi đối tượng View được tr nh bày trên khơng gian h nh ch nhật (Màn h nh Mobile) và ta cĩ thể xử lý nh ng sự kiện thơng qua các câu lệnh trên các đối tượng View đĩ.  Khai báo activity trong manifest Bạn cần khai báo activity trong tập tin AndroidManifest để nĩ cĩ thể truy cập vào hệ thống. Để khai báo cần mở tập tin AndroidManifest trong Project của bạn r i thêm một thẻ ở bên trong cặp thẻ như sau: Bạn cĩ thể thêm một số thuộc t nh khác cho activity như label, icon, theme style.  Sử dụng intent filters Một Activity cũng cĩ thể chỉ định nh ng bộ lọc khác nhau tùy mục đ ch sử dụng, các yếu tố lọc được để trong thẻ bao g m các yếu tố để cĩ thể k ch hoạt activity đĩ. Trang 11
  20. T m hiểu cơng nghệ Android -Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile Các phần tử trong thẻ tab xác định thực hiện hành động của ứng dụng đối với activity đĩ. C n các phần tử trong thẻ xác định activity này nên được liệt kê khi khởi tạo ứng dụng hệ thống ( cho phép người dùng gọi activity đĩ).  Bắt đầu một Activity Bạn cĩ thể gọi một activity bằng phương thức startActivity(), thơng qua Intent mà bạn đã miêu tả về activity đĩ khi bạn muốn bắt đầu. V dụ: Ở đây ta cĩ một lớp SignInActivity Intent intent= new Intent(this, SignInActivity.class); startActivity(intent); Tuy nhiên, khi ứng dụng của bạn muốn thực hiện một vài action như là send mail, text message, hay cập nhật trạng thái, sử dụng d liệu t activity của bạn. Trong trường hợp này, ứng dụng của bạn cĩ thể khơng cĩ nh ng hoạt động riêng của m nh để thực hiện action này, v vậy bạn cần tận dụng nh ng activities được cung cấp bởi thiết bị mà cĩ thể thực hiện action đĩ cho bạn. Nếu cĩ nhiều hoạt động cĩ thể xử lý các intent, th người dùng cĩ thể chọn bất k một trong các intent để sử dụng. V dụ nếu bạn muốn cho người dùng gửi email, bạn cĩ thể tạo ra các intent sau đây: Intent intent = new Intent(Intent.ACTION_SEND); intent.putExtra(Intent.EXTRA_EMAIL, recipientArray); startActivity(intent); Các EXTRA_MAIL được thêm vào intent là một mảng các chuỗi địa chỉ email mà s được gửi. Khi một ứng dụng email h i đáp intent này, nĩ s đọc mảng chuỗi được cung cấp bên trong extra và thay thế chúng trong trường “To” của Form gửi mail. Trong trường hợp này activity của ứng dụng s được gọi khi người dùng đã thực hiện và activity đĩ s được resume lại. Trang 12
  21. T m hiểu cơng nghệ Android -Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile  Dừng một Activity Để tắt một activity th bạn cần gọi phương thức finish(). Bạn cũng cĩ thể tắt một activity mà bạn đã gọi trước đĩ bằng phương thức finishActivity().  Vịng đời của một Activity Hình 1.4 Activity Lifecycle Trong đĩ: onCreate : Khởi tạo activity onStart : Thực hiện activity onResume : Thực hiện tiếp tục một activity đã bị d ng trước đĩ onPause : Tạm d ng một activity Trang 13
  22. T m hiểu cơng nghệ Android -Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile onStop : D ng hẳn một activity onRestart : Thực hiện lại activity onDestroy: Phá hủy một activity Android cĩ cơ chế quản lý các tiến tr nh theo độ ưu tiên. Các tiến tr nh cĩ độ ưu tiên thấp s bị Android giải phĩng mà khơng hề cảnh báo nhằm đảm bảo tài nguyên.  Một Activity bao gồm 4 trạng thái: active (running): Activity đang hiển thị lên màn hình (foreground) paused: Activity vẫn hiển thị (visible) nhưng khơng thể tương tác (lost focus) stop: Một activity được thay thế hồn tồn bởi một activity khác s chuyển sang trạng thái stop. killed: khi hệ thống thiếu bộ nhớ nĩ s giải phĩng các tiến trình theo nguyên tắc độ ưu tiên. Các activity ở trạng thái stop hoặc pause cũng cĩ thể bị giải phĩng và khi nĩ được hiển thị lại thì các Activity này phải khởi động lại hồn tồn và phục h i lại trạng thái trước đĩ.  Vậy ta cĩ thể hiểu vịng đời của Activity như sau: Entire lifetime : Bắt đầu t phương thức onCreate() cho tới phương thức onDestroy() Visible lifetime : T phương thức onStart() cho tới phương thức onStop(). Foreground lifetime : T phương thức onResume() đến phương thức onPause(). 2.3 Broadcast receivers Là một thành phần của ứng dụng cĩ chức năng thu nhận và phản ứng lại nh ng thơng báo được broadcast. Nhiều broadcast gốc trong mã hệ thống và các ứng dụng cũng cĩ thể khởi tạo broadcast. Trang 14
  23. T m hiểu cơng nghệ Android -Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile Broadcast receivers khơng hiển thị giao diện người dùng. Tuy nhiên chúng cĩ thể khởi tạo một Activity phản h i lại nh ng thơng tin được nhận. Chúng cũng cĩ thể dùng Notification Manager để thơng báo đến người dùng. 2.4 DVM DVM là máy ảo giúp các ứng dụng Java chạy được trên các thiết bị di động Android. Nĩ chạy các ứng dụng đã được chuyển đ i thành một file thực thi Dalvik(dex). Định dạng phù hợp cho các hệ thống mà thường bị hạn chế về bộ nhớ và tốc độ xử lý. DVM đã được thiết kế và viết bởi Dan Bornstein, ơng đã đặt tên cho máy ảo này sau khi đến thăm một ngơi làng cĩ tên Dalv k ở đảo Eyjafjưrður, nơi mà một số t tiên của ơng sinh sống. T gĩc nh n của một nhà phát triển, DVM giống như một máy ảo Java (Java vitrual machine) nhưng thực tế th hồn tồn khác. Khi nhà phát triển viết một ứng dụng dành cho Android, anh ta thực hiện các đoạn mã trong mơi trường Java. Sau đĩ nĩ s được biên dịch sang bytecode của Java, tuy nhiên để thực thi được ứng dụng này trên Android th nhà phát triển phải thực thi một cơng cụ cĩ tên là dx. Đây là cơng cụ dùng để chuyển đ i bytecode sang một dạng khác gọi là dex bytecode. “Dex” là t viết tắt của Dalvik Executable đĩng vai tr như cơ chế ảo thực thi các ứng dụng Android. 3 LẬP TRÌNH ỨNG DỤNG ANDROID 3.1 Thiết lập mơi trường phát triển ứng dụng Mơi trường được thiết lập trên các hệ điều hành Windows và cụ thể là Windows 7. Để thực hiện việc này bạn cần cĩ các gĩi cài đặt sau:  JDK Java for windows Link:  SDK Android for windows Link:  IDE Eclipse for Java Developer Link: developers/heliossr2 Trang 15
  24. T m hiểu cơng nghệ Android -Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile 3.2 Các thành phần trong Android Project  Tạo mới Android Project: Click menu File-> New -> Project chọn Android-> Android Project. Hoặc cĩ thể tạo nhanh bằng cách click vào biểu tưởng trên thanh cơng cụ. Hình 1.5 Tạo mới ứng dụng Android Project name: Tên cho Project Application name: Tên ứng dụng Package name: Tên package, bạn đặt sao cũng được nhưng sao cho dễ nhớ và khơng cĩ các ký tự đặc biệt (chỉ g m ch thường và các số t 0 ~ 9). Create Activity: Đặt tên cho Activity ch nh s khởi tạo đầu tiên khi chạy ứng dụng, hoặc khơng muốn tạo bằng cách bỏ dấu Tick. Min SDK Version: Tương ứng với API Level của Target. Sau đĩ click Finish ta s cĩ 1 project như h nh dưới: Trang 16
  25. T m hiểu cơng nghệ Android -Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile /src folder: chứa các mã ngu n (source code) là các file Java. /gen: Chứa file R.java dùng để quản lý các tài nguyên được tạo ra t các tập tin ngu n, file này tự tạo nên khơng được chỉnh sửa hoặc thay đ i. /Android 1.6: bao g m các API 1.6 tương ứng với HĐH Android 1.6, các thư viện này được Import khi ta khởi tạo Project bằng cách chọn Target ở trên. /assets: chứa các file tài nguyên như database s đi kèm với Project khi ta đĩng gĩi ứng dụng. /res/drawable-hdpi: nơi lưu h nh ảnh sử dụng cho ứng dụng hdpi (High dpi: độ phân giải cao) tương th ch với điện thoại cĩ màn h nh WVGA800 (480x800), WVGA854 (480x854). /res/drawable-ldpi: cũng là thư mục để chứa các file ảnh cĩ độ phân giải thấp hơn Low dpi: QVGA (240x320), WQVGA400 (240x400), WQVGA432 (240x432). /res/drawable-mdpi: chứa các file ảnh cĩ độ phân giải trung b nh Medium dpi: HVGA (320x480), WVGA800 (480x800), WVGA854 (480x854). /res/layout/main.xml: file thiết kế giao diện cho ứng dụng, cĩ thể tạo thêm nhiều file khác cho nh ng màn hình khác nhau. /res/values/strings.xml: định nghĩa giá trị cho các tài nguyên trong project, giúp tối ưu hĩa trong việc quản lý giá trị mặc định các đối tượng String trên mỗi layout. /AndroidManifest.xml: file cấu h nh cho ứng dụng Ngồi ra c n cĩ một số folder và file do người lập tr nh tự định nghĩa. Trang 17
  26. T m hiểu cơng nghệ Android -Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile 4 L THU T CỦA BÀI TỐN CHU ỂN ĐỔI NGÀ ÂM DƯ NG 4.1 Cơ sở lý thuyết tính lịch âm Việt Nam Âm lịch Việt Nam là một loại lịch thiên văn. Nĩ được t nh tốn dựa trên sự chuyển động của mặt trời, trái đất và mặt trăng. Ngày tháng âm lịch được t nh dựa theo các nguyên tắc sau: Ngày đầu tiên của tháng âm lịch là ngày chứa điểm Sĩc. Một năm b nh thường cĩ 12 tháng âm lịch, một năm nhuận cĩ 13 tháng âm lịch. Đơng ch luơn rơi vào tháng 11 âm lịch. Trong một năm nhuận, nếu cĩ 1 tháng khơng cĩ Trung kh th tháng đĩ là tháng nhuận. Nếu nhiều tháng trong năm nhuận đều khơng cĩ Trung kh th chỉ tháng đầu tiên sau Đơng ch là tháng nhuận. Việc t nh tốn dựa trên kinh tuyến 105° đơng. 4.1.1 Điểm s c Sĩc là thời điểm hội diện, đĩ là khi trái đất, mặt trăng và mặt trời nằm trên một đường thẳng và mặt trăng nằm gi a trái đất và mặt trời. (Như thế gĩc gi a mặt trăng và mặt trời bằng 0 độ). Gọi là “hội diện” v mặt trăng và mặt trời ở cùng một hướng đối với trái đất. Chu k của điểm Sĩc là khoảng 29,530588 ngày tức là 29 ngày 12 giờ 44 phút 2,8032 giây. Ngày chứa điểm Sĩc được gọi là ngày Sĩc và đĩ là ngày bắt đầu tháng âm lịch. 4.1.2 Tiết khí Trung kh là các điểm chia đường hồng đạo thành 12 phần bằng nhau. Trong đĩ, bốn Trung kh gi a bốn mùa là đặc biệt nhất: Xuân phân (khoảng 20/3), Hạ ch (khoảng 22/6), Thu phân (khoảng 23/9) và Đơng ch (khoảng 22/12). Thời gi a 2 Trung kh là khoảng 30,43685 ngày tức là 30 ngày 10 giờ 29 phút 3,84 giây. Đơng ch luơn rơi và tháng 11 âm lịch. Sau đây là bảng tiết kh : Số Tiết kh Dương lịch Độ Trung kh Tiết kh Việt Nam thứ tự Gregorius 1 270o Đơng ch Gi a đơng 21(22) -12 2 285o Tiểu hàn Chớm rét 4(5)-1 3 300o Đại hàn Giá rét 20(21)-1 Trang 18
  27. T m hiểu cơng nghệ Android -Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile 4 315o Lập xuân Đầu xuân 4(5)-2 5 330o Vũ thuỷ m ướt 18(19)-2 6 345o Kinh trập Sâu nở 5(6)-3 7 0o Xuân phân Gi a xuân 20(21)-3 8 15o Thanh minh Trong sáng 5(6)-4 9 30o Cốc vũ Mưa rào 20(21)-4 10 45o Lập hạ Đầu hè 5(6)-5 11 60o Tiểu mãn Kết hạt 21(22)-5 12 75o Mang chủng Tua rua 6(7)-6 13 90o Hạ ch Gi a hè 21(22)-6 14 105o Tiểu thư Nắng oi 7(8)-7 15 120o Đại thử Nĩng nực 23(24)-7 16 135o Lập thu Đầu thu 7(8)-8 17 150o Xử thử Mang chủng 23(24)-8 18 165o Bạch lộ Nắng nhạt 7(8)-9 19 180o Thu phân Gi a thu 23(24)-9 20 195o Hàn lộ Mát mẻ 8(9)-10 21 210o Sương giáng Sương sa 23(24)-10 22 225o Lập đơng Đầu đơng 7(8)-11 23 240o Tiểu tuyết Hanh heo 22(23)-11 24 255o Đại tuyết Khơ úa 7(8)-12 Bảng : Bảng tiết khí 4.1.3 Tháng nhuận Do độ dài gi a 2 Trung kh (30,43685) dài hơn độ dài của tuần trăng hay c n gọi là chu k trăng (29,530588) nên cĩ nh ng tuần trăng khơng chứa Trung kh và ta đặt đĩ là tháng nhuận. Đơng ch luơn rơi vào tháng 11 của năm âm lịch. Bởi vậy chúng ta cần t nh 2 điểm Sĩc: Sĩc A ngay trước ngày Đơng ch thứ nhất và Sĩc B ngay trước ngày Đơng ch thứ hai. Nếu khoảng cách gi a A và B là dưới 365 ngày th năm âm lịch cĩ 12 tháng, và nh ng tháng đĩ cĩ tên là: tháng 11, tháng 12, tháng 1, tháng 2, , tháng 10. Ngược lại, nếu khoảng cách gi a hai Sĩc A và B là trên 365 ngày th năm âm lịch này là năm nhuận, và chúng ta cần t m xem đâu là tháng nhuận. Để làm việc này ta xem xét tất cả các tháng gi a A và B, tháng đầu tiên khơng chứa Trung kh sau ngày Đơng ch thứ nhất là tháng nhuận. Tháng đĩ s được mang tên của tháng trước nĩ kèm ch "nhuận". Chú ý : Khi t nh ngày Sĩc và ngày chứa Trung kh cần lưu ý xem xét ch nh xác múi giờ. Múi giờ của Việt Nam (GMT+7, kinh tuyến 105° đơng). Trang 19
  28. T m hiểu cơng nghệ Android -Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile 4.2 Các hàm cơ bản chuyển đổi ngày âm dương 4.2.1 Chuyển ngày dương ra số ngày Julius Trong t nh tốn thiên văn người ta lấy ngày 1/1/4713 trước cơng nguyên của lịch Julius (tức ngày 24/11/4714 trước CN theo lịch Gregorius) làm điểm gốc. Số ngày t nh t điểm gốc này gọi là số ngày Julius (Julian day number) của một thời điểm. V dụ: số ngày Julius của 1/1/2000 là 24515455. Lịch Julius do hồng đế Julius Caesar đưa ra vào năm 45 trước Cơng nguyên. Lịch Julius chia thành 12 tháng với 365 ngày, cứ 4 năm th thêm một ngày vào cuối tháng 2 tạo thành năm nhuận. V vậy theo lịch Julius th một năm cĩ 365,25 ngày. Nhưng độ dài của năm mặt trời là 365,242216 ngày cho nên lịch Julius dài hơn khoảng 0,0078 ngày trong một năm, tức là khoảng 11 phút 14 giây. Để bù vào sự khác biệt này th cứ 400 năm ta s bỏ bớt đi 3 ngày năm nhuận. Cho đến năm 1582, th sự sai biệt đã lên đến 10 ngày. Giáo Hồng Gregory XIII quyết định bỏ 10 ngày trong tháng 10 năm đĩ để cho lịch và mùa màng tương ứng trở lại. Sau ngày 4 tháng 10 năm 1582 là ngày 15 tháng 10 (số ngày Julius là 2299161). Và để tránh sai biệt, lịch lấy năm nhuận là năm cĩ số thứ tự chia chẵn cho 4 và các năm tận cùng bằng 00 phải chia chẵn cho 400 mới là năm nhuận. Lịch đã sửa mang tên lịch Gregory và được áp dụng cho đến bây giờ. Để đ i ngày dương dd/mm/yyyy ra ngày Julius jd ta dung thuật tốn sau: a=(14-mm) mod 12 y=yyyy+4800-a m=mm+12*a-3 jd= dd+(153*m+2) mod 5+365*y + y mod 4 – y mod 100 + y mod 400- 32045 Nếu jd<2299161 th t nh lại jd : jd= dd+(153*m+2) mod 5+365*y + y mod 4 – 32083 Ghi chú : Xem code ở phụ lục 1. 4.2.2 Chuyển đổi số ngày Julius ra ngày dương Trang 20
  29. T m hiểu cơng nghệ Android -Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile Nếu số ngày Julius nhập vào mà lớn hơn 2299161 s được t nh theo lịch Gregorius. Nếu jd>2299160 th :  a = jd + 32044;  b = (4 * a + 3) mod 146097;  c = a - (b * 146097) mod 4; Ngược lại:  b = 0;  c = jd + 32082; d = (4 * c + 3) mod 1461; e = c - (1461 * d) mod 4 m = (5 * e + 2) mod 153; day = e - (153 * m + 2) mod 5 + 1 month = m + 3 - 12 * (m mod 10) year = b * 100 + d - 4800 + m mod 10 Ghi chú: Xem code ở phụ lục 2 4.2.3 Tính ngày S c Như trên đã nĩi, việc quan trọng đầu tiên khi t nh lịch âm là t nh xem các điểm Sĩc (tức Hội diện) rơi vào ngày nào. Phương thức sau cho phép t nh thời điểm (t nh bằng số ngày Julius) của Sĩc thứ k t nh t điểm Sĩc lúc 13:51 GMT ngày 1/1/1900 (ngày Julius 2415021.076998695). Ghi chú: Xem code ở phụ lục 3 và 4. 4.2.4 Tính tọa độ mặt trời Để biết Trung kh nào nằm trong tháng âm lịch nào, ta chỉ cần t nh xem mặt trời nằm ở khoảng nào trên đường hồng đạo vào thời điểm bắt đầu một tháng âm lịch. Ta chia đường hồng đạo làm 12 phần và đánh số các cung này t 0 đến 11: t Xuân phân đến Cốc vũ là 0; t Cốc vũ đến Tiểu mãn là 1; t Tiểu mãn đến Hạ ch là 2; v.v Cho jdn là số ngày Julius của bất k một ngày, phương pháp sau này s trả lại số cung nĩi trên. Ghi chú: Xem code ở phụ lục 5. Trang 21
  30. T m hiểu cơng nghệ Android -Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile Với hàm này ta biết được một tháng âm lịch chứa Trung kh nào. Giả sử một tháng âm lịch bắt đầu vào ngày N1 và tháng sau đĩ bắt đầu vào ngày N2 và hàm getSunLongitude cho kết quả là 8 với N1 và 9 với N2. Như vậy tháng âm lịch bắt đầu ngày N1 là tháng chứa Đơng ch : trong khoảng t N1 đến N2 cĩ một ngày mặt trời di chuyển t cung 8 (sau Tiểu tuyết) sang cung 9 (sau Đơng ch ). Nếu hàm getSunLongitude trả lại cùng một kết quả cho cả ngày bắt đầu một tháng âm lịch và ngày bắt đầu tháng sau đĩ th tháng đĩ khơng cĩ Trung kh và như vậy cĩ thể là tháng nhuận. 4.2.5 Tìm ngày bắt đầu tháng âm lịch Đơng ch thường nằm vào khoảng 19/12-22/12, như vậy trước hết ta t m ngày Sĩc trước ngày 31/12. Nếu tháng bắt đầu vào ngày đĩ khơng chứa Đơng ch th ta phải lùi lại 1 tháng n a. Đ i ngày 31/12/yy ra ngày Julius jd Đ i jd ra tuần trăng thứ k kể t tuần trăng 1/1/1900 T m điểm sĩc của tuần trăng k là nm T nh tọa độ mặt trời tại nm r i chia 30, nếu kết quả lớn hơn hoặc bằng 9 th nm t nh lại tại k-1 nm là ngày bắt đầu tháng 11 năm yy Ghi chú: Xem code phụ lục 6. 4.2.6 Xác định tháng nhuận Nếu gi a hai tháng 11 âm lịch (tức tháng cĩ chứa Đơng ch ) cĩ 13 tháng âm lịch th năm âm lịch đĩ cĩ tháng nhuận. Để xác định tháng nhuận, ta sử dụng hàm getSunLongitude như đã nĩi ở trên. Cho a11 là ngày bắt đầu tháng 11 âm lịch mà một trong 13 tháng sau đĩ là tháng nhuận. Thuật tốn sau cho biết tháng nhuận nằm ở vị tr nào sau tháng 11 này. Đ i ngày bắt đầu tháng 11 năm yy ra jd Đ i jd sang tuần trăng k i=1 Lặp: T nh tọa độ mặt trời của tuần trăng k +i và k+(++i). Nếu hai vị tr đĩ sau khi chia 30 mà bằng nhau th th tháng nhuần là i-1 Ghi chú: Xem code phụ lục 7. Trang 22
  31. T m hiểu cơng nghệ Android -Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile Giả sử thuật tốn trên trả lại giá trị 4, như thế tháng nhuận s là tháng sau tháng 2 thường. (Tháng thứ 4 sau tháng 11 đáng ra là tháng 3, nhưng v đĩ là tháng nhuận nên s lấy tên của tháng trước đĩ tức tháng 2, và tháng thứ 5 sau tháng 11 là tháng 3). 4.2.7 Đổi ngày dương ra ngày âm Với các phương pháp hỗ trợ trên ta cĩ thể đ i ngày dương dd/mm/yy ra ngày âm dễ dàng. Trước hết ta xem ngày monthStart bắt đầu tháng âm lịch chứa ngày này là ngày nào (dùng hàm getNewMoonDay như trên đã nĩi). Sau đĩ, ta t m các ngày a11 và b11 là ngày bắt đầu các tháng 11 âm lịch trước và sau ngày đang xem xét. Nếu hai ngày này cách nhau dưới 365 ngày th ta chỉ c n cần xem monthStart và a11 cách nhau bao nhiêu tháng là cĩ thể t nh được dd/mm/yy nằm trong tháng mấy âm lịch. Ngược lại, nếu a11 và b11 cách nhau khoảng 13 tháng âm lịch th ta phải t m xem tháng nào là tháng nhuận và t đĩ suy ra ngày đang t m nằm trong tháng nào. Đ i ngày dương sang jd và t nh xem nĩ thuộc tuần trăng thứ k nào. T m ngày đầu tuần trăng k là nm. Ngày âm tính được: jd-nm+1 T nh ngày bắt đầu tháng 11 của năm yy là a11. Nếu a11>=nm, năm âm: yy ngược lại la yy +1 và tính lai b11. Kiểm tra năm yy cĩ nhuận khơng Tính tháng âm. Ghi chú: Xem code phụ lục 8. 4.2.8 Đổi lịch âm ra lịch dương Cũng tương tự như thuật tốn chuyển ngày dương sang ngày âm: Ghi chú: Xem code phụ lục 9 Trang 23
  32. CHƯ NG 2 CHƯ NG 2: PHÂN TÍCH HỆ THỐNG 1. S ĐỒ USE CASE 1.1 Sơ đồ use case tổng quát Hình 2.1 Sơ đồ ca sử dụng tổng quát 1.2 Mơ tả các ca sử dụng hay chức năng của n Tên ca sử dụng Chức năng Xem ngày âm Người dùng cĩ thể xem ngày dương, ngày âm, giờ hồng dương đạo trong này. NGU ỄN THỊ DIỄM HƯ NG – 08CNTT02 Trang 24
  33. T m hiểu cơng nghệ Android -Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile Tham khảo trong Người dùng cĩ thể xem một số tham khảo trong ngày như ngày nên làm g , khơng nên làm g , nên đi về hướng nào, khơng nên đi về hướng nào Xem tu i Trong chức năng này người dùng s nhập tu i và xem tu i của m nh năm nay cĩ thể làm nhà hay khơng, cĩ thể làm nhà vào nh ng năm nào trong tương lai, nh ng tu i nào cĩ thể làm nhà trong năm nay. Ngồi ra, người dùng c n xem tu i của m nh năm này làm ăn, danh vọng như thế nào (gọi là vận hạn trong năm). Xem tu i của m nh cĩ thể Tử Vi Đơng Phương Chứckết hơn năng được này với giúp nh người ng tu dùng i nào cĩ, khơngthể khám nên phá kết đượ hơnc với bảntu i thânnào của m nh qua năm sinh (T , Sửu, ) về t nh cách, tinh yêu, . Tư Vi Tây Phương Tương tự như chức năng trên, nhưng được giải mã theo ngày tháng sinh thơng qua các ch m sao (Bảo B nh, Kim Ngưu, ). Chọn ngày âm Người dùng cĩ thể đi đến một ngày nào đĩ th cĩ thể chọn dương một ngày dương hoặc một ngày âm bất k . Chương tr nh s tự động hiển thị ngày mà bạn muốn xem. Nếu là ngày âm th s tự động chuyển sang ngày dương r i hiển thị Bảng 2.1: Chức năng của từng ca sử dụng 2 S ĐỒ TUẦN TỰ 2.1 Quá trình xem lịch âm dương Chức năng xem lịch âm dương giúp người dùng xem hơm này là thứ mấy, ngày, tháng, năm nào, thuộc tuần thứ mấy trong năm. Sau đĩ xem tiếp hơm nay là ngày, tháng, năm âm, giờ hồng đạo trong ngày. SVTH : NGU ỄN THỊ DIỄM HƯ NG - LỚP 08CNTT02 Trang 25
  34. T m hiểu cơng nghệ Android -Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile Hình 2.2 Sơ đồ tuần tự quá trình xem lịch âm dương 2.2 Quá trình xem tham khảo trong ngày Sau khi mở ứng dụng, lịch s ở ngày hiện tại và ta cĩ thể xem nh ng việc nên, khơng nên làm và hướng đi tốt xấu trong ngày đĩ. V dụ như: Nên: xuất hành, nhập học, khai trương, Kiêng: cúng tế, nhận chức, Nên đi về hướng: Đơng, Hình 2.3 Sơ đồ tuần tự quá trình xem nên kiêng trong ngày SVTH : NGU ỄN THỊ DIỄM HƯ NG - LỚP 08CNTT02 Trang 26
  35. T m hiểu cơng nghệ Android -Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile Hình 2.4 Sơ đồ tuần tự quá trình xem hướng xuất hành 2.3 Quá trình xem tuổi Xem tu i để làm nhà là xem tu i đĩ cĩ phạm vào ba điều k : Tam Tai, Kim Lâu và Hoang c, nếu phạm vào 1 trong 3 điều kị đĩ s khơng được làm nhà. Chương tr nh s tự động t nh và đưa ra lời khuyên bạn nên làm nhà trong năm nay khơng, nh ng năm bạn cĩ thể làm trong tương lai, nh ng tu i cĩ thể làm nhà trong năm nay. Hình 2.5 Sơ đồ tuần tự quá trình xem tuổi làm nhà SVTH : NGU ỄN THỊ DIỄM HƯ NG - LỚP 08CNTT02 Trang 27
  36. T m hiểu cơng nghệ Android -Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile Xem tu i để kết hơn là xem tu i của bạn hợp với tu i nào, khơng hợp với tu i nào. Chương tr nh s đưa ra lời khuyên mang t nh tham khảo cho bạn dựa vào d liệu năm sinh và giới t nh bạn đã nhập. Hình 2.6 Sơ đồ tuần tự quá trình xem tuổi kết hơn Xem vận hạn là xem tu i đĩ trong năm nay cĩ biến cố g về tiền tài, danh vọng và bệnh tật, Mỗi tu i của nam và n tương ứng với một sao. Mỗi sao s mang một ý nghĩa khác nhau và đĩ cũng là vận hạn của tu i đĩ trong năm. Chương tr nh s cho biết điều đĩ. Hình 2.7 Sơ đồ tuần tự quá trình xem vận hạn của tuổi SVTH : NGU ỄN THỊ DIỄM HƯ NG - LỚP 08CNTT02 Trang 28
  37. T m hiểu cơng nghệ Android -Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile 2.4 Quá trình chọn ngày Để đến một ngày khác, ta chỉ cần nhập ngày, tháng, năm dương lịch hoặc nhập vào ngày, tháng, năm âm lịch t đĩ chương tr nh s tự động chuyển sang ngày dương và hiển thị ra màn h nh. Hình 2.8 Sơ đồ tuần tự quá trình chọn ngày dương Hình 2.9 Sơ đồ tuần tự quá trình chọn ngày âm SVTH : NGU ỄN THỊ DIỄM HƯ NG - LỚP 08CNTT02 Trang 29
  38. T m hiểu cơng nghệ Android -Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile 2.5 Quá trình xem tử vi Xem tử vi để khám phá bản thân của bạn thơng qua năm sinh hoặc ngày tháng năm sinh. Điều đĩ gĩp phần t m được ưu điểm và nhược điểm để cĩ cách phát huy và khắc phục, giúp bạn thành cơng dễ dàng hơn trong cuộc sống. Cĩ 2 cách xem: Tử vi đơng phương theo 12 con giáp, Tử vi tây phương theo 12 ch m sao. Hình 2.10 Sơ đồ tuần tự quá trình xem tử vi đơng phương Hình 2.11 Sơ đồ tuần tự xem tử vi tây phương SVTH : NGU ỄN THỊ DIỄM HƯ NG - LỚP 08CNTT02 Trang 30
  39. T m hiểu cơng nghệ Android -Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile 3 TỔ CHỨC CÁC LỚP 3.1 Lớp ReadFileText Lớp ReadFileText dùng để đọc các file d liệu dạng text (.txt). Nĩ cĩ các phương thức h trợ đọc t ng t , t ng d ng và nhảy đến d ng bất k . Các phương thức quan trọng của ReadFileText: Phương thức Chức năng ReadFileText(String Khởi tạo ReadFileText với đường dẫn của file FilePath) cần đọc String readLine() Đọc một d ng trong file. String[] readWordsLine() Đọc một d ng nhưng trả về các t trong d ng đĩ boolean seek(String s) Di chuyển con trỏ đến d ng kế tiếp sau d ng s Bảng 2 2: Các phương thức lớp ReadFileText 3.2 Lớp DateProcessing Đây là lớp chứa các phương thức xử lý ngày tháng năm dương lịch âm lịch. Dùng để chuuyển đ i ngày âm sang ngày dương và ngược lại. Ngồi ra c n cĩ các phương thức như đ i ngày, tháng, năm ra can chi, cộng tr ngày, kiểm tra giờ hồng đạo, Các phương thức quan trọng trong lớp ProcessDate: Phương thức Chức năng int convertDateToJulius(int dd, int mm, int yy) Đ i ngày dương sang số ngày MyDate convertJuliusToDate ( int jd ) Đ i số ngày sang ngày MyDate convertSolarToLunar(int dd, int mm, int Đ i ngày dương sang ngày yy, double timeZone) âm MyDate convertLunarToSolar(int lunarDay, int Đ i ngày âm sang ngày lunarMonth, int lunarYear, int lunarLeap, dương double timeZone) String getCanChi(int yy, boolean CanChi) Đ i năm yy ra can chi SVTH : NGU ỄN THỊ DIỄM HƯ NG - LỚP 08CNTT02 Trang 31
  40. T m hiểu cơng nghệ Android -Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile String getCanChi(int mm, int yy,boolean CanChi) Đ i tháng mm của năm yy ra can chi String getCanChi(int dd, int mm, int yy,boolean Đ i ngày đ của thánh mm của CanChi) năm yy ra can chi MyDate addMyDate(int k, int dd, int mm, int yy) Cộng thêm k ngày int getLeapMonthOfYear(int yy, int timeZone) Lấy tháng nhuận của năm âm lịch int getNumberDayOfLunarMonth(int mm, int Lấy số ngày của tháng âm leapMonth, int yy) String getCanChiGio(String CanChi,int gio, Lấy can chi của giờ theo ngày boolean Chuoi) CanChi String getHoangDao(String CanChi) Lấy giờ hồng đạo trong ngày. int getDayBetweenTwoDate(int dd1, int mm1, int Lấy khoảng cách ngày gi a 2 yy1, int dd2, int mm2, int yy2) ngày dương Bảng 2 3: Các phương thức lớp ProcessDate 3.3 Lớp CheckingForBuilding Lớp này dùng để t nh tốn một tu i nào đĩ cĩ phạm vào các điều kị khơng, cĩ thể làm nhà được khơng. Cĩ các phương thức sau: Phương thức Chức năng boolean checkAge(int yy1, int yy2) Kiểm tra người cĩ năm sinh yy1 cĩ thể làm nhà vào năm yy2 được khơng boolean checkTamTai(int yy1, int yy2) Kiểm tra người cĩ năm sinh yy1 cĩ phạm vào điều kị Tam Tại của năm yy2 khơng boolean checkKimLau(int yy1, int yy2) Kiểm tra người cĩ năm sinh yy1 cĩ phạm vào điều kị Kim Lâu của năm yy2 khơng SVTH : NGU ỄN THỊ DIỄM HƯ NG - LỚP 08CNTT02 Trang 32
  41. T m hiểu cơng nghệ Android -Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile boolean checkHoangOc(int yy1, int yy2) Kiểm tra người cĩ năm sinh yy1 cĩ phạm vào điều kị Hoang c của năm yy2 khơng Bảng 2 4: Các phương thức lớp CheckingForBuilding 3.4 Lớp MyDate Lớp MyDate được dùng để lưu tr một đối tượng ngày g m cả ngày âm và ngày dương. Lớp này chứa các phương thức set và get các thuộc t nh của lớp. Phương thức Chức năng MyDate(int day, int month, int year) Khởi tạo đối tượng ngày với int getDay() Lấy ngày setDay(int day) Thiết lập ngày int getMonth() Lấy tháng setMonth(int month) Thiết lập tháng int getYear() Lấy năm setYear(int year) Thiết lập năm int getLeapMonth() Lấy tháng nhuận nếu 1 nhuận setLeapMonth(int leapMonth) Thiết lập tháng nhuận Bảng 2 5: Các phương thức lớp MyDate 3.5 Các lớp giao diện Các lớp giao diện dưới đây s sử dụng các lớp trên để truy vấn d liệu, t nh tốn và hiển thị các thơng tin cần thiết cho người dùng. Các lớp này được th a kết t các lớp khác trong J2ME như Canvas, Form, List, . Trong chương tr nh này, ta sử dụng các lớp giao diện cơ bản sau: SVTH : NGU ỄN THỊ DIỄM HƯ NG - LỚP 08CNTT02 Trang 33
  42. T m hiểu cơng nghệ Android -Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile Tên lớp Chức năng Start Hiển thị menu chọn lựa các thao tác với ứng dụng. Các dialog thao tác và hiển thị thơng tin: Chọn ngày, xem tu i, xem tử vi, SolarCalendar Dùng để hiển thị tất cả các ngày dương trong một tháng, nh ng ngày cuối cùng của tháng trước , nh ng ngày đầu của tháng sau. Hiển thị các dialog thao tác liên quan đến ngày, tháng năm: Xem ngày âm dương, Hướng xuất hành, Nên kiêng trong ngày. Bảng 2 6: Các lớp giao diện cơ bản SVTH : NGU ỄN THỊ DIỄM HƯ NG - LỚP 08CNTT02 Trang 34
  43. T m hiểu cơng nghệ Android -Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile 4 TỔ CHỨC C SỞ DỮ LIỆU D liệu của chương tr nh là các file text. Các file này được lớp ReadFileText đọc và đ d liệu vào các lớp giao diện ở trên như: XuatHanh, VanHan, LamNha, KetHon, NenKieng, TuViTayPhuong, TuViDongPhuong . Hình 2.12 Sơ đồ dữ liệu SVTH : NGU ỄN THỊ DIỄM HƯ NG - LỚP 08CNTT02 Trang 35
  44. CHƯ NG 3 CHƯ NG 3: TRIỂN KHAI VÀ K T QUẢ CHẠ DEMO 1. MÀN HÌNH HIỂN THỊ LỊCH ÂM, LỊCH DƯ NG Khi chạy ứng dụng, màn h nh hiển thị lịch dương luơn được hiển thị đầu tiên. Đây cùng là màn h nh ch nh để đi đến các màn h nh khác. T màn h nh này, ta chọn ngày bất k và touch vào màn h nh. S cĩ 1 dialog hiển thị và cho lựa chọn các t nh năng xem ngày âm, hướng xuất hành, nên kiêng. Hình 3.1. Màn hình xem lịch dương lịch âm Nếu chọn xem ngày âm, thơng tin ngày âm s được hiển thị như h nh bên dưới bao g m: Thơng tin ngày dương, ngày âm, giờ hồng đạo trong ngày. NGU ỄN THỊ DIỄM HƯ NG – 08CNTT02 Trang 36
  45. T m hiểu cơng nghệ Android -Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile Hình 3.2. Màn hình xem lịch âm 2 MÀN HÌNH XEM THẢO TRONG NGÀ Tương tự như màn h nh trên, cũng t màn h nh dialog chọn “Nên-Kiêng” hoặc “Hướng xuất hành”. Hình 3.3. Màn hình nên kiêng và hướng xuất hành trong ngày SVTH : NGU ỄN THỊ DIỄM HƯ NG - LỚP 08CNTT02 Trang 37
  46. T m hiểu cơng nghệ Android -Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile 3 MÀN HÌNH XEM TUỔI Tương tự như trên, ta chọn “Menu”. Màn h nh chọn năm sinh âm lịch s xuất hiện. Trong màn h nh này ta chọn năm sinh. Sau đĩ 1 màn h nh s xuất hiện. T màn h nh này ta cũng cĩ thể chọn hạng mục muốn xem và chọn “Xen tu i Nam” hoặc “Xem tu i N ”. S cĩ các dialog để hiển thị các thong tin cho ta biết tu i của bạn cĩ thề làm nhà trong năm nay khơng, cĩthể làm vào nh ng năm nào trong nh ng năm đến, vận hạn trong năm đĩ ra sao và tu i của bạn nên kết hơn với tu i nào, Hình 3.4. Màn hình chọn tuổi, xem tuổi làm nhà, kết hơn và vận hạn SVTH : NGU ỄN THỊ DIỄM HƯ NG - LỚP 08CNTT02 Trang 38
  47. T m hiểu cơng nghệ Android -Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile Hình 3.5. Màn hình thơng tin về kết hơn, vận hạn, làm nhà 4. MÀN HÌNH CHỌN NGÀ ÂM, NGÀ DƯ NG T màn h nh hiển thị lịch dương, chọn “Menu “ chọn “Chọn ngày” , xuất hiện màn h nh cho phép ta chọn ngày dương muốn xem. Chọn “Đ ng ý” để hiển thị ngày mà ta đã chọn. Hình 3.6. Màn hình chọn ngày dương và hiển thị SVTH : NGU ỄN THỊ DIỄM HƯ NG - LỚP 08CNTT02 Trang 39
  48. T m hiểu cơng nghệ Android -Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile Hình 3.7. Màn hình chọn ngày âm và hiển thị 5 MÀN HÌNH XEM TỬ VI Trong “Menu” của màn h nh hiển thị lịch dương ta bấm chọn “Tử vi Đơng phương” s xuất hiện list chứa danh sách tu i T , Sửu, Sau đĩ ta chọn tu i của m nh trong danh sách để xem t nh cách của m nh, các tu i hợp, tu i k Hình 3.8. Màn hình chọn tuổi và xem tính cách Tương tự như trên, nhưng ta chọn “Tử vi Tây phương” để xem t nh cách, cuộc đời, các tu i hợp, tu i k của bạn theo ngày sinh thơng qua các ch m sao. SVTH : NGU ỄN THỊ DIỄM HƯ NG - LỚP 08CNTT02 Trang 40
  49. T m hiểu cơng nghệ Android -Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile Hình 3.9. Màn hình chọn chịm sao và xem tính cách SVTH : NGU ỄN THỊ DIỄM HƯ NG - LỚP 08CNTT02 Trang 41
  50. K T LUẬN. K T LUẬN VÀ HƯỚNG PHÁT TRIỂN K T QUẢ ĐẠT ĐƯỢC Về mặt lý thuyết Cĩ nhiều vấn đề cần nghiên cứu để xây dựng được một chương tr nh chạy trên thiết bị di động hồn chỉnh. Tuy vậy, trong đ án tốt nghiệp em chỉ đặt ra một số yêu cầu cần giải quyết. Cụ thể là hiển thị được lịch âm dương, đưa một số nội dung mang t nh chất tham khảo trong cuộc sống hằng ngày. Với yêu cầu đặt ra như thế, tơi cũng đã nghiên cứu khá nhiều các lý thuyết liên quan đến việc xây dựng ứng dụng trên điện thoại di đơng, ngơn ng lập tr nh và d liệu về phong tục xem ngày truyền thống. Ứng với mỗi chức năng em nghiên cứu các thuật tốn thực hiện chức năng đĩ để t đĩ rút ra nhận xét, so sánh r i mới chọn lựa thuật tốn phù hợp cho việc cài đặt ứng dụng. Chi tiết về nh ng lý thuyết nghiên cứu được em đã tr nh bày khá rõ ràng trong chương II. Đĩ ch nh là kết quả đạt được về mặt lý thuyết của đ án. 1.2 Về thực nghiệm Dựa vào yêu cầu đặt ra ban đầu của đ án tốt nghiệp, tơi đã xây dựng thành cơng và chạy thử nghiệm trên điện thoại di động và đạt được kết quả sau: Xây dựng thành cơng ứng dụng chạy thật sự trên thiết bị di động điển h nh là điện thoại di động. Giao diện dễ sử dụng. Số năm mà ứng dụng cĩ thể chạy được khá lớn. Đưa được tiện ch xử lý ngày và một số tham khảo hằng ngày trong cuộc sống. 2. HẠN CH Mặc dù luận văn đã đạt được một số kết quả khả quan như trên nhưng vẫn c n một số hạn chế: NGU ỄN THỊ DIỄM HƯ NG – 08CNTT02 Trang 42
  51. T m hiểu cơng nghệ Android -Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile Giao diện chưa được hồn thiện, cố định nên khơng thể thay đ i được, gây nhàm chán cho người dùng. Chưa phát triển cho các d ng điện thoại cĩ k ch thước màn h nh khác. D liệu phải load lên t file text nên c n chậm. Cịn nhiều d liệu tham khảo hằng ngày chưa t ch hợp được hết. 3 HƯỚNG PHÁT TRIỂN Đ TÀI Trong luận văn này ngồi việc xem ngày âm dương bạn c n cĩ thể xem các tham khảo trong ngày, nên hướng phát triển là t ch hợp thêm nhiều tiện ch khác như tử vi hàng ngày, tử vi hàng tuần, tử vi cả năm, xem bĩi, Ngồi ra, phải thiết kế giao diện sử dụng đẹp hơn, mềm dẻo hơn, cĩ thể thay đ i theo tùy th ch người sử dụng. T m ra các giải pháp để tăng tốc load d liệu nhanh hơn, đ ng thời giải quyết vấn đề d liệu nhiều nhưng dung lượng phải nhỏ để thiết bị di động cĩ thể chạy được. Xây dựng chương tr nh tự động upload về thiết bị mỗi khi cĩ phiên bản mới Trang 43
  52. PHỤ LỤC Phụ lục public int convertDateToJulius(int dd, int mm, int yy) { int a = (14 - mm) / 12; int y = yy + 4800 - a; int m = mm + 12 * a - 3; // Lich Gregory int jd = dd + (153 * m + 2) / 5 + 365 * y + y / 4 - y / 100 + y / 400 - 32045; // Lich Julius if (jd 2299160) { a = jd + 32044; b = (4 * a + 3) / 146097; c = a - (b * 146097) / 4; } else { // Lich Julius b = 0; c = jd + 32082; } int d = (4 * c + 3) / 1461; int e = c - (1461 * d) / 4; NGU ỄN THỊ DIỄM HƯ NG – 08CNTT02 Trang 44
  53. T m hiểu cơng nghệ Android -Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile int m = (5 * e + 2) / 153; int day = e - (153 * m + 2) / 5 + 1; int month = m + 3 - 12 * (m / 10); int year = b * 100 + d - 4800 + m / 10; return new MyDate(day, month, year); } Phụ lục 3 : private int INT(double d) { return (int) Math.floor(d); } Phụ lục 4 private double getNewMoon(int k, double timeZone) { double T = k / 1236.85; double T2 = T * T; double T3 = T2 * T; double dr = Math.PI / 180; double Jd1 = 2415020.75933 + 29.53058868 * k + 0.0001178 * T2 - 0.000000155 * T3; Jd1 = Jd1 + 0.00033 * Math.sin((166.56 + 132.87 * T - 0.009173 * T2) * dr); double M = 359.2242 + 29.10535608 * k - 0.0000333 * T2 - 0.00000347 * T3; // Sun's mean anomaly double Mpr = 306.0253 + 385.81691806 * k + 0.0107306 * T2 + 0.00001236 * T3; // Moon's mean anomaly double F = 21.2964 + 390.67050646 * k - 0.0016528 * T2 - 0.00000239 * T3; // Moon's argument of latitude double C1 = (0.1734 - 0.000393 * T) * Math.sin(M * dr) + 0.0021 * Math.sin(2 * dr * M); C1 = C1 - 0.4068 * Math.sin(Mpr * dr) + 0.0161 * Math.sin(dr * 2 * Mpr); C1 = C1 - 0.0004 * Math.sin(dr * 3 * Mpr); Trang 45
  54. T m hiểu cơng nghệ Android -Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile C1 = C1 + 0.0104 * Math.sin(dr * 2 * F) - 0.0051 * Math.sin(dr * (M + Mpr)); C1 = C1 - 0.0074 * Math.sin(dr * (M - Mpr)) + 0.0004 * Math.sin(dr * (2 * F + M)); C1 = C1 - 0.0004 * Math.sin(dr * (2 * F - M)) - 0.0006* Math.sin(dr * (2 * F + Mpr)); C1 = C1 + 0.0010 * Math.sin(dr * (2 * F - Mpr)) + 0.0005* Math.sin(dr * (2 * Mpr + M)); double deltat; if (T < -11) { deltat = 0.001 + 0.000839 * T + 0.0002261 * T2 - 0.00000845 * T3 - 0.000000081 * T * T3; } else { deltat = -0.000278 + 0.000265 * T + 0.000262 * T2; } double JdNew = Jd1 + C1 - deltat; return INT(JdNew + 0.5 + timeZone/24); } Phụ lục 5 private double getSunLongitude(double jdn, double timeZone) { double T = (jdn - 2451545.0 - 0.5 - timeZone / 24) / 36525; // Time in Julian centuries from 2000-01-01 12:00:00 GMT double T2 = T * T; double dr = Math.PI / 180; // degree to radian double M = 357.52910 + 35999.05030 * T - 0.0001559 * T2 - 0.00000048 * T * T2; // mean anomaly, degree double L0 = 280.46645 + 36000.76983 * T + 0.0003032 * T2; // mean longitude, degree double DL = (1.914600 - 0.004817 * T - 0.000014 * T2) * Math.sin(dr * M); Trang 46
  55. T m hiểu cơng nghệ Android -Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile DL = DL + (0.019993 - 0.000101 * T) * Math.sin(dr * 2 * M) + 0.000290 * Math.sin(dr * 3 * M); double L = L0 + DL; // true longitude, degree L = L - 360 * (INT(L / 360)); // Normalize to (0, 360) return L; } Phụ lục 6 private int getLunarMonth11(int yy, double timeZone) { double off = convertDateToJulius(31, 12, yy) - 2415021.076998695; int k = INT(off / 29.530588853); int nm = getNewMoonDay(k, timeZone); int sunLong = INT(getSunLongitude(nm, timeZone) / 30); if (sunLong >= 9) { nm = getNewMoonDay(k - 1, timeZone); } return nm; } Phụ lục 7 private int getLeapMonth(int a11, double timeZone) { int k = INT(0.5 + (a11 - 2415021.076998695) / 29.530588853); int last; // Month 11 contains point of sun longutide 3*PI/2 (December // solstice) int i = 1; // We start with the month following lunar month 11 int arc = INT(getSunLongitude(getNewMoonDay(k + i, timeZone), timeZone) / 30); do { last = arc; i++; Trang 47
  56. T m hiểu cơng nghệ Android -Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile arc = INT(getSunLongitude(getNewMoonDay(k + i, timeZone), timeZone) / 30); } while (arc != last && i dayNumber) { monthStart = getNewMoonDay(k, timeZone); } int a11 = getLunarMonth11(yy, timeZone); int b11 = a11; if (a11 >= monthStart) { lunarYear = yy; a11 = getLunarMonth11(yy - 1, timeZone); } else { lunarYear = yy + 1; b11 = getLunarMonth11(yy + 1, timeZone); } lunarDay = dayNumber - monthStart + 1; int diff = INT((monthStart - a11) / 29); leapMonth = 0; lunarMonth = diff + 11; if (b11 - a11 > 365) { int leapMonthDiff = getLeapMonth(a11, timeZone); if (diff >= leapMonthDiff) { Trang 48
  57. T m hiểu cơng nghệ Android -Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile lunarMonth = diff + 10; if (diff == leapMonthDiff) { leapMonth = 1; } } } if (lunarMonth > 12) { lunarMonth = lunarMonth - 12; } if (lunarMonth >= 11 && diff < 4) { lunarYear -= 1; } obj.setDay(lunarDay); obj.setMonth(lunarMonth); obj.setYear(lunarYear); obj.setLeapMonth(leapMonth); return obj; } Phụ lục 9 public MyDate convertLunarToSolar(int lunarDay, int lunarMonth, int lunarYear, int lunarLeap, double timeZone) { int a11, b11; if (lunarMonth < 11) { a11 = getLunarMonth11(lunarYear - 1, timeZone); b11 = getLunarMonth11(lunarYear, timeZone); } else { a11 = getLunarMonth11(lunarYear, timeZone); b11 = getLunarMonth11(lunarYear + 1, timeZone); } int k = INT(0.5 + (a11 - 2415021.076998695) / 29.530588853); int off = lunarMonth - 11; Trang 49
  58. T m hiểu cơng nghệ Android -Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile if (off 365) { int leapOff = getLeapMonth(a11, timeZone); int leapMonth = leapOff - 2; if (leapMonth = leapOff) { off += 1; } } int monthStart = getNewMoonDay(k + off, timeZone); return convertJuliusToDate(monthStart + lunarDay - 1); } Trang 50
  59. TÀI LIỆU THAM KHẢO Tiếng Việt [1] Chu Văn Khánh. Lịch Vạn Niên Việt Nam Thế Kỷ XXI (2001-2100). Nhà xuất bản Văn Hĩa - Thơng Tin 2008. [2] Đỗ Quang Thái. Tự học ngơn ngữ lập trình Java. Nhà xuất bản thống kê 1999. Trang web [3] [4] [5] [6] [7] [8] NGU ỄN THỊ DIỄM HƯ NG – 08CNTT02 Trang 51
  60. TĨM TẮT LUẬN VĂN TỐT NGHIỆP Cùng với sự phát triển của nền cơng nghệ thơng tin thế giới, sự phát triển cơng nghệ di động cũng khơng hề thua kém. Con người sử dụng nh ng thiết bị di động hiện đại ngày càng nhiều. V vậy, việc xây dựng nh ng ứng dụng cho nh ng thiết bị này là cần thiết. Mọi cơng việc hằng ngày cĩ thể được đưa hết vào trong các thiết bị. Lúc đĩ các thiệt bị này giống như người bạn luơn đưa ra nh ng lời khuyên cần thiết cho cuộc sống hằng ngày. Đề tài “Tìm hiểu cơng nghệ Android - Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile” nhằm khám phá cơng nghệ Android và xây dựng một ứng dụng cụ thể gĩp phần phong phú hơn thế giới các ứng dụng di động. Người dùng cĩ thể nhanh chĩng t m được nh ng g mong muốn trong việc xem ngày âm lịch và các tham khảo trong ngày, xem tu i, xem t nh cách của mỗi cá nhân. Ứng dụng mà tơi xây dựng thực hiện được một số chức năng cơ bản về lịch âm dương và xem các tham khảo trong ngày cũng như đốn t nh cách con người qua năm sinh hay qua ngày tháng năm sinh: xem ngày dương, ngày âm; hướng xuất hành, nên kiêng trong ngày; xem tu i để làm nhà, kết hơn, vận hạn; xem tính cách theo tử vi đơng phương, tây phương; t nh tốn ngày; xem các ngày lễ. Đề tài tơi thực hiện cơ bản đã đạt được nh ng mục tiêu đề ra ban đầu về mặt lý thuyết cũng như thực tiễn. Ngồi ra, tơi cũng đã đưa ra một số phương hướng để phát triển đề tài lớn hơn sau này. SVTH : NGU ỄN THỊ DIỄM HƯ NG - LỚP 08CNTT02 Trang 52