chương · web viewandroid liên tục được phát triển, mỗi bản cập nhật từ...
TRANSCRIPT
![Page 1: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/1.jpg)
BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG CAO ĐẲNG CÔNG NGHỆ THÔNG TIN TP.HCM
KHOA CÔNG NGHỆ THÔNG TIN
THỰC TẬP TỐT NGHIỆP
TÌM HIỂU TỔNG QUAN VỀ PADA, ANDROID
ỨNG DỤNG VÀO BÀI TOÁN ỨNG DỤNG
WEBSERVICES
TRÊN ANDROID, BADA
Giảng viên hướng dẫn: Thạc sĩ PHẠM ĐỨC THÀNH
Sinh viên thực hiện : NGUYỄN THIỆN KHIÊM 3.08.01.0297
Ngành: Công Nghệ Phần Mềm
Khóa: 2008 – 2011
![Page 2: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/2.jpg)
Tp. Hồ Chí Minh, tháng 7 năm 2011
MỞ ĐẦU
Công ty chuyên nghiên cứu và phân tích thị trường research2guidance mới đây
dự đoán rằng thị trường ứng dụng dành cho điện thoại di động sẽ có mức tăng trưởng
kỷ lục trong vòng 5 năm tới. Cụ thể, tới năm 2013, mức lợi nhuận trên thị trường ứng
dụng này sẽ vào khoảng 15,65 tỉ USD, tăng 807% so với 1,95 tỉ USD năm 2009.
Research2guidance dự đoán thị trường ứng dụng cho điện thoại di động sẽ có tốc
độ tăng trưởng rất nhanh trong vòng một vài năm tới. Lợi nhuận sẽ tăng gấp 8 lần sau 5
năm, từ 1,95 tỉ USD năm 2009 lên 15,65 tỉ USD năm 2013.
Ngoài việc dự đoán mức tăng trưởng về lợi nhuận thì research2guidance cũng dự
đoán về số người dùng smartphone trong 5 năm tới, yếu tố giúp thị trường ứng dụng
cho di động tăng trưởng. Theo đó, số người dùng smartphone sẽ tăng từ 100 triệu người
năm 2009 lên 1 tỉ người năm 2013.
Điện thoại thông minh phát triển mạnh ở Việt Nam đang được đánh giá là thiên
đường để cho các nhà phát triển ứng dụng di động.
Các ứng dụng tìm kiếm tích hợp trên các hệ điều hành chưa có, tìm kiếm địa chỉ
tuyển sinh, tìm điểm kẹt xe vẫn chưa tích hợp được.
LỜI CẢM ƠN
![Page 3: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/3.jpg)
Kính Thưa các thầy cô khoa Công nghệ thông tin và thầy Phạm Đức Thành giáo
viên hướng dẫn và các bạn học cùng khóa.
Vậy là đã thấm thoát đã 3 năm kể từ ngày chúng em gia nhập đại gia đình Cao
Đẳng Công Nghệ Thông Tin.Giờ đây, chúng em đang đứng trước một bước tiến khác
lớn hơn trong ngưỡng cửa cuộc đời mình. Mặc dù vậy, chúng em luôn ý thức rằng,
thành công mà chúng em đạt được như ngày hôm nay không phải chỉ do nỗ lực của
chúng em mà còn là do sự giúp đỡ rất lớn từ nhiều phía xung quanh.
Đầu tiên, chúng em xin gửi lời cám ơn chân thành đến toàn bộ thầy cô Khoa
Công Nghệ Thông Tin.Trong nhiều năm qua, thầy cô là những con trỏ vững vàng và
chính xác trong sự nghiệp đào tạo. Không ngại gian nan, vất vả, các thầy các cô không
ngừng cải tiến giáo trình, cách giảng dạy nhằm đem lại hiệu quả cao nhất trong công
việc đào tạo ra các thế hệ trẻ tài năng, giúp chúng em biết thích ứng với những thay đổi
nhanh chóng của thế giới công nghệ thông tin cũng như xã hội đương thời.
Chúng em xin cám ơn thầy Phạm Đức Thành đã nhận trọng trách vất vả là giáo
viên hướng dẫn cho chúng em trong suốt thời gian qua. Thầy không những là thầy mà
còn là người cha đồng hành, là chỗ dựa vững chắc về mặt kiến thức trong suốt thời gian
làm khoá luận tốt nghiệp. Thành quả của chúng em đạt được qua đề án là nhờ một phần
không nhỏ công sức của thầy. Chúc thầy được nhiều sức khỏe và thành công trên con
đường cao cả mà thầy đã lựa chọn.
Chúng tôi cũng xin gửi lời cám ơn và chia sẻ niềm vui cùng các bạn học khóa
2008. Các bạn là những người lữ khách đồng hành trên cùng chuyến tàu trong 3 năm
học vừa qua. Các bạn là niềm vui, là nguồn động lực mạnh mẽ thúc đẩy chúng tôi vào
mỗi buổi sáng khi thức dậy, vào lúc gặp những bài tập khó khăn hay vào những kỳ thi
vất vả. Hi vọng rằng sau này, cho dù vòng lặp vô tận của cuộc đời có đưa mỗi người
chúng ta đi những con đường hay nơi chốn xa xôi nào đi chăng nữa, thì chúng ta luôn là
một ràng buộc toàn vẹn, mãi mãi liên kết với nhau trong tình bạn chân thành.
Cuối cùng và quan trọng nhất, chúng con xin dành tất cả sự tri ân và biết ơn cho
gia đình yêu quý, nơi sinh ra con người, tài năng và nhiệt huyết của chúng em. Xin cám
ơn những con người đóng góp thầm lặng cho thành quả của chúng em ngày hôm nay.
![Page 4: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/4.jpg)
Xin cảm ơn điểm tựa vững chắc cho chuyến phiêu lưu dài mà em sắp đối diện phía
trước.
Một lần nữa, chúng em xin cám ơn tất cả mọi người, chúc mọi người được dồi
dào sức khỏe.Chúc cho khóa học kết thúc tốt đẹp. Chúng em tin tưởng vào một tương
lai sáng lạng của Công nghệ thông tin Việt Nam. Chúc cho Công nghệ thông tin Việt
Nam mau chóng sánh ngang cùng các cường quốc năm châu trên thế giới.
NHẬN XÉT
CỦA GIÁO VIÊN HƯỚNG DẪN
.............................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
TP.HCM, ngày 3 tháng 7 năm 2010
Sinh viên
Nguyễn Thiện Khiêm
![Page 5: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/5.jpg)
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
![Page 6: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/6.jpg)
NHẬN XÉT
CỦA GIÁO VIÊN PHẢN BIỆN
..............................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
![Page 7: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/7.jpg)
MỤC LỤC
CH NG 1: TÌM HI U H ĐI U HÀNH BADAƯƠ Ể Ệ Ề .....................................................4
1.1 Khái Quát Hệ Điều Hành Bada............................................................................................4
1.2 Mô Hình Kiến Trúc............................................................................................................. 7
1.3 Không Gian Tên................................................................................................................. 9
1.3.1 Osp::Base.......................................................................................................................9
1.3.2 Osp::Io..........................................................................................................................10
1.3.3 Database : SQLite.........................................................................................................11
1.3.4 Osp::Test và Osp::Locales.............................................................................................12
1.3.5 Osp::System.................................................................................................................12
1.3.6 Osp::App.......................................................................................................................12
1.3.7 Osp::Net :.....................................................................................................................12
1.3.8 Osp::Telephony............................................................................................................13
1.3.9 Osp::Sercurity...............................................................................................................13
1.3.10 Osp::Graphics...............................................................................................................13
1.3.11 Osp::UI:........................................................................................................................13
1.3.12 Osp::Uix........................................................................................................................13
1.3.13 Osp:Web :.....................................................................................................................13
1.3.14 Osp::Social :..................................................................................................................13
1.3.15 Osp::Content :..............................................................................................................14
1.3.16 Osp::Locations :............................................................................................................14
1.3.17 Osp::Messaging :..........................................................................................................14
1.3.18 Osp::Commerce :..........................................................................................................14
1.4 Môi trường phát triển.....................................................................................................14
1.4.1 Vòng đời của ứng dụng................................................................................................15
1.4.2 Sự kiện trên pada.........................................................................................................16
1.5 Các Đặc Điểm Và ConTrols Trong Pada.............................................................................20
1.5.1 Đặc Điểm Giao Diện Trên Pada:....................................................................................20
1.5.2 Một Số Control cơ bản trong pada:..............................................................................24
![Page 8: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/8.jpg)
1.6 Webservice deCarta.........................................................................................................34
1.6.1 Giới Thiệu deCarta:......................................................................................................34
1.6.2 Cách Kết Nối.................................................................................................................34
1.6.3 Thư viện hỗ trợ deCarta:..............................................................................................35
1.6.4 Sơ Đồ Class Trong Webservice.....................................................................................37
1.6.5 Location........................................................................................................................39
1.6.6 LocationProvider..........................................................................................................39
1.7 Kỹ Thuật Phân Tích File XML Sử Dụng Xpath....................................................................40
1.7.1 Định Nghĩa:...................................................................................................................40
1.7.2 Xử lý file XML với libxml...............................................................................................40
CH NG2 : T NG QUAN V ANDROID.ƯƠ Ổ Ề .............................................................43
2.1 Giới Thiệu....................................................................................................................... 43
2.2 Các Thành Phần Trong Ứng Dụng Android........................................................................43
2.2.1 Activity.........................................................................................................................44
2.2.2 Service:.........................................................................................................................44
2.2.3 Content Provider..........................................................................................................44
2.2.4 Intent:..........................................................................................................................44
2.2.5 Broadcast Receiver.......................................................................................................44
2.2.6 Notification..................................................................................................................44
2.3 Tiến trình của một ứng dụng android...............................................................................44
2.3.1 Foreground process.....................................................................................................45
2.3.2 Visible process..............................................................................................................45
2.3.3 Service process.............................................................................................................45
2.3.4 Background process.....................................................................................................45
2.3.5 Empty process..............................................................................................................45
2.4 Các Thành Phần Trong Giao Diện.....................................................................................47
2.4.1 ViewGroup...................................................................................................................47
2.4.2 LinearLayout.................................................................................................................47
2.4.3 FrameLayout................................................................................................................47
2.4.4 AbsoluteLayout............................................................................................................48
2.4.5 RetaliveLayout..............................................................................................................48
2.4.6 TableLayout..................................................................................................................48
2.4.7 Button..........................................................................................................................49
![Page 9: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/9.jpg)
2.4.8 ImageButton.................................................................................................................49
2.4.9 ImageView...................................................................................................................50
2.4.10 ListView........................................................................................................................50
2.4.11 TextView......................................................................................................................51
2.4.12 EditText........................................................................................................................51
2.4.13 CheckBox......................................................................................................................52
2.4.14 MenuOptions...............................................................................................................52
2.4.15 ContextMenu...............................................................................................................54
2.5 Activity Và Intend............................................................................................................ 55
2.5.1 Activity.........................................................................................................................55
2.5.2 Intent...........................................................................................................................55
2.6 Dịch vụ Google Map........................................................................................................56
2.6.1 Giới thiệu dịch vụ Google Map:....................................................................................56
2.6.2 Giới thiệu về Mapping package:...................................................................................56
2.6.3 MapView và MapActivity:............................................................................................56
2.6.4 Sử dụng Overlay...........................................................................................................57
2.6.5 Package Location..........................................................................................................58
2.6.6 View Trong Map Google...............................................................................................59
2.6.7 Xác định vị trí trên Google Maps:.................................................................................60
2.7 Kỹ Thuật Phân Tích JSON.................................................................................................61
2.7.1 Khái niệm:....................................................................................................................61
2.7.2 Cách thức sử dụng JSON..............................................................................................61
CH NG 3 : GI I THI U BÀI TOÁN VÀ NG D NGƯƠ Ớ Ệ Ứ Ụ .......................................63
3.1 GIỚI THIỆU BÀI TOÁN......................................................................................................63
3.2 PHÁT BIỂU BÀI TOÁN.......................................................................................................63
3.2.1 Khảo sát hiện trạng......................................................................................................63
3.2.2 Yêu cầu hệ thống..........................................................................................................63
3.3 Xác định actor và usercase...............................................................................................63
3.3.1 Danh sách Actor...........................................................................................................63
3.3.2 Sơ đồ usercase.............................................................................................................63
3.3.3 Danh sách usercase......................................................................................................64
![Page 10: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/10.jpg)
CH NG 4:ƯƠ THI T K CH NG TRÌNHẾ Ế ƯƠ ....................................................71
4.1 THIẾT KẾ DỮ LIỆU............................................................................................................ 71
4.2 THIẾT KẾ KIẾN TRÚC......................................................................................................... 71
4.2.1 Kiến trúc trên Android..................................................................................................71
4.2.2 Kiến trúc trên Bada.......................................................................................................72
4.3 THIẾT KẾ GIAO DIỆN......................................................................................................... 73
4.3.1 Giao diện trên android.................................................................................................73
4.3.2 Giao diện trên bada......................................................................................................77
CH NG 5: T NG K TƯƠ Ổ Ế ............................................................................................ 83
5.1 Về Mặt Lý Thuyết............................................................................................................ 83
5.2 Về Mặt Ứng Dụng............................................................................................................ 83
5.3 Hướng Phát Triển............................................................................................................ 83
TÀI LI U THAM KH OỆ Ả .............................................................................................. 84
![Page 11: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/11.jpg)
DANH MỤC CÁC HÌNH, BẢNG BIỂU VÀ SƠ ĐỒ
Hình 1: Kiến Trúc Ứng Dụng Trên BaDA..........................................................................................8
Hình 2: Kiến Trúc Ứng Dụng Trên BaDA..........................................................................................9
Hình 3: Các thư mục trong ứng dụng bada........................................................................................14
Hình 4: Vòng đời của ứng dụng trên Bada........................................................................................15
Hình 5: Liên Quan Giữa Vòng Đời Và Sự Kiện................................................................................16
Hình 6: Sự kiện khởi tạo và giải phóng trên bada..............................................................................17
Hình 7: Mô hình giao diện trên bada.................................................................................................20
Hình 8: Client Area của ứng dụng.....................................................................................................21
Hình 9: OptionMenu .........................................................................................................................22
Hình 10: Danh sách các list trong Pada.............................................................................................26
Hình 11: lidableList...........................................................................................................................28
Hình 12: Option Menu.......................................................................................................................30
Hình 13: Tab trong Bada....................................................................................................................32
Hình 14: Biểu đồ vòng đời ứng dụng android...................................................................................46
Hình 15: Cấu trúc một giao diện ứng dụng Android.........................................................................47
Hình 16: Bố trí các widget sử dụng LinearLayout.............................................................................47
Hình 17: Bố trí widget trong FrameLayout.......................................................................................48
Hình 18: Bố trí widget trong RataliveLayout....................................................................................48
Hình 19: Bố trí widget trong TableLayout.........................................................................................49
Hình 20: ImageButton........................................................................................................................50
Hình 21: ImageView và ImageButton...............................................................................................50
Hình 22: Minh họa 1 listview............................................................................................................51
Hình 23: Minh họa OptionMenu........................................................................................................53
Hình 24: ContextMenu.......................................................................................................................55
Hình 25: Truyền dữ liệu giữa 2 Activity............................................................................................56
Hình 26: Đánh dấu vị trí trên bản đồ.................................................................................................58
Hình 27: SatelliteView.......................................................................................................................59
Hình 28: TrafficView.........................................................................................................................59
Hình 29: TrafficView.........................................................................................................................60
Hình 30: Giao diện chính...................................................................................................................72
Hình 31: Giao diện vị trí hiện tại.......................................................................................................73
Hình 32: Giao diện điểm kẹt xe.........................................................................................................74
Hình 33: Giao diện tìm kiếm đường giữa 2 điểm..............................................................................75
Hình 34: Giao diện tìm kiếm 1 vị trí..................................................................................................76
Hình 35: Màn hình chính...................................................................................................................77
Hình 36: Màn hình chức năng chính..................................................................................................78
Hình 37: Màn hình tìm địa điểm tuyển sinh......................................................................................79
Hình 38: Màn hình hiển thị vị trí giữa 2 điểm...................................................................................81
Trang 11
![Page 12: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/12.jpg)
Bảng 1: Bảng truy cập máy chủ dịch vụ............................................................................................35
Bảng 2: Các thư viện hỗ trợ deCarta..................................................................................................37
Sơ đồ 1: Sơ đồ quan hệ giữa các class 1............................................................................................37
Sơ đồ 2: Sơ đồ quan hệ giữa các class 2............................................................................................38
Sơ đồ 3: Sơ đồ quan hệ giữa các class 1............................................................................................38
Sơ đồ 4: Sơ đồ dữ liệu trong class Location.....................................................................................39
Sơ đồ 5: Usecase Admin....................................................................................................................63
Sơ đồ 6: Usecase Người dùng............................................................................................................64
Trang 12
![Page 13: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/13.jpg)
Chương 1: TÌM HIỂU HỆ ĐIỀU HÀNH BADA
1.1 Khái Quát Hệ Điều Hành Bada.
Pada là hệ điều hành điện thoại di động do Samsung phát triển. Thông qua
10 điều dưới đây về Pada, bạn sẽ hình dung được phần nào về HĐH này.
Samsung sản xuất điện thoại sử dụng hầu hết các HĐH di động, từ Window
Mobile, Linux Mobile, Symbian và cả Android. Tuy vậy, hãng vẫn chưa phát
triển một nền tảng di động riêng dành cho mình. Chính tham vọng ''bùng nổ''
trên thị trường smartphone đã thúc đẩy sự ra đời của Pada, HĐH mới toanh
gắn ''mác'' Samsung. Hãng điện tử Hàn Quốc vẫn còn khá kín tiếng về các
thông tin xung quan Pada. Nhưng với sự ra đời của S8500 Wave, thông tin
đã dần được hé mở
- Nền tảng thông minh cho mọi người
Việc Samsung giới thiệu Pada có thể sẽ gây bối rối cho nhiều người, nhưng
thông điệp của nhà sản xuất lại rất đơn giản, họ muốn tất cả mọi người đều
có thể sử dụng điện thoại thông minh chứ không bó hẹp trong số ít người
dùng cao cấp như hiện nay. Điều này được thể hiện rất rõ trong buổi lễ giới
thiệu Pada, Samsung đã chỉ thẳng vào phần nhỏ của thị trường điện thoại và
nói rằng muốn chiếm được nhiều hơn tại thị trường đó. Đó chính là thị
trường điện thoại thông minh, tuy nhỏ nhưng lại rất có lợi nhuận.
Pada của Samsung đã làm dấy lại một tranh cãi từ xưa đến nay của thị trường
di động, đó là định nghĩa về điện thoại thông minh. Samsung cho rằng Pada
của mình là điện thoại thông minh , và do đó bất cứ điện thoại nào có kho
ứng dụng riêng, có phần cứng đủ mạnh và hỗ trợ đa điểm cũng được xếp vào
loại này.
- Cạnh tranh
Trang 13
![Page 14: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/14.jpg)
Một câu hỏi đặt ra: Pada là cái gì? Nó là HĐH hay chỉ là giao diện người
dùng thông thường? Ông Justin Hong, trường nhóm phát triển nền tảng Pada
cho biết đây là một HĐH vì nó cũng được xây dựng trên nền tảng Linux
giống như Android của Google.
Vậy nếu Pada là một hệ điều hành thì nó có tính cạnh tranh với các sản phẩm
khác không? Nhất là khi Android, Symbian, LiMo, Window Mobile đều có
mặt trong các sản phẩm của chính Samsung?
Samsung cho biết họ tạo ra Pada bằng cách lấy giao diện người dùng của các
thiết bị kiển như Jét, rồi bổ sung thêm một số tính năng mới, thêm chợ ứng
dụng, cảm ứng đa điểm là đã tạo ra một hệ điều hành mới rồi.
Tuy vậy, Samsung chưa hề có ý định mang Pada ra để các công ty khác cùng
phát triển mà muốn giữ nó dưới quyền kiểm soát của mình. Ông Justin Hong
cho biết: '' Giá của chiếc Pada rẻ nhất chắc chắn sẽ luôn thấp hơn bất cứ
chiếc Android nào''.
- Ứng dụng
Samsung không cho biết gì nhiều về phần này, tất cả các thông tin chúng ta
có được là các nhà phát triển có thể sử dụng các công cụ và ngôn ngữ: Flash,
C++. Web Run time và Java. Những ứng dụng này sẽ có thể được tích hợp
vào Widget trong giao diện độc quyền TouchWiz của Samsung.
- Thông minh hơn cả điện thoại thông minh?
Khi Jét ra đời, Samsung đã có một câu slogan rất ấn tượng: ''Thông minh hơn
cả smartphone''. Nhiều người cho rằng Jét chính là phiên bản tiền thân của
Pada và nó được xây dựng trên một nền tảng SHP OS của chính Samsung
vốn đã được sử dụng nhiều năm về trước. Họ chỉ đơn giảm thêm vào các bộ
framework và API là đã tạo được Pada. Tuy vậy, Samsung cho biết, tuy giao
diện gần giống S8000 nhưng trải nghiệm về Pada chắc chắn sẽ khác vì họ đã
tối ưu hóa nó.
Trang 14
![Page 15: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/15.jpg)
- Cảm ứng
Pada là một hệ điều hành được xây dựng cho những thiết bị cảm ứng. Nhưng
không hiểu vì lý do gì mà Samsung lại luôn phủ nhận Pada hỗ trợ đa điểm
trong khi thực sự là nó có. Chắc hẳn bạn cũng đã biết điều này qua các video
review S8500.
Một điều khác cũng phải nhắc đến rằng Samsung tin là họ có thể tại ra những
màn hình cảm ứng điện trở hỗ trợ cảm ứng đa điểm. Pada sẽ sử dụng cả màn
hình điện dung và điện trở cho nên chắc chắn Samsung sẽ sớm phổ biến công
nghệ này.
- Cấu hình
Không hiểu Samsung đặt ra cấu hình tối thiểu cho Pada làm gì khi chỉ mình
hãng sản xuất nó. Hệ điều hành của Samsung yêu cầu phải có chip xử lý
mạnh, có 3G, GPS, các kết nối và khả năng xử lý Flash. Màn hình có thể sử
dụng cảm ứng điện dung hoặc điện trở và Samsung cũng không quy định độ
phân giải hay tỷ lệ màn hình trong các máy Pada.
- Chơi Game
Có thể dễ dàng thấy Samsung tập trung vào khả năng chơi Game thế nào khi
trong buổi giới thiệu Pada, họ không chỉ giới thiệu một phiên bản của trò
chơi kinh dị nổi tiếng Resident Evil mà còn thông báo sẽ hỗ trợ đa điểm
trong Game. Với sự xuất hiện của các đại gia sản xuất Game như Capcom,
EA, Gameloft... thì không ai có thể nghi ngờ về mục đích của Samsung.
- Đa phương tiện
Một số nguồn tin cho biết Pada sẽ có thể trở thành một chiếc điều khiển từ xa
cho tất cả các thiết bị cuả Samsung trong tương lai. Samsung đã từng trình
diễn tại CES năm nay, sử dụng Omnia2 như một chiếc điều khiển từ xa với
TV, hay một tay chơi game, thậm chí là điều khiển... xe hơi. Vậy thì có gì mà
Trang 15
![Page 16: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/16.jpg)
Samsung lại không đưa công nghệ cao cấp này vào đứa ''con cưng'' của
mình?
Nếu đó là sự thật, thì đây sẽ là một tin vui cho những ai đang sở hữu các thiết
bị của Samsung trong nhà. Ít nhất thì điện thoại Pada cũng có thể điều khiển
được TV, laptop hay đầu đĩa Blu-ray. Sẽ tốt hơn nếu Samsung nghĩ kỹ về
việc này và tích hợp một số thứ mang tầm vĩ mô hơn vào hệ thống, kiểu như
điện toán đám mây, để người dùng có thể truy cập file ở bất cứ đâu.
- Flash
Khi mà ứng dụng của Pada chưa lớn thì sự hỗ trợ của Flash có ý nghĩa
rất lớn. Samsung hứa hẹn Flash trên Pada sẽ hoàn toàn tương thích với các
tiêu chuẩn Flash của Adobe. Đồng nghĩa với việc bạn sẽ có sẵn hàng ngàn
Game và phần mềm chỉ ngay khi máy ra đời.
Bên cạnh đó, một trong những ứng dụng đầu tiên có mặt trên chợ
phần mềm của Samsung chính là trình duyệt Skyfire nổi tiếng. Với Skyfire,
chắc chắn người dùng Pada sẽ có thể xem Youtube trực tiếp trên trình duyệt
mà không phải thông qua các ứng dụng bên ngoài.
- Thời điểm bán ra
Chiếc điện thoại Pada đầu tiên của Samsung, S8500 sẽ ra mắt vào nửa
đầu năm nay. S8500 Wave là chiếc điện thoại hết sức ý nghĩa với Samsung
nên chắc chắn nó sẽ không làm bạn thất vọng. Bạn sẽ có trong tay một chiếc
điện thoại đầu tiên trên thế giới có Wi-Fi chuẩn n, bluetooth 3.0 và màn hình
super AMOLED nếu mua sản phẩm này.
- Kết luận
Tổng biên tập của trang Mobile-review của Nga, một trong những
''huyền thoại sống'' của làng công nghệ thế giới. Không phải ngẫu nhiên mà
ông khen S8500 hết lời, đánh giá là chiếc điện thoại xuất sắc về cả phẩn cứng
Trang 16
![Page 17: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/17.jpg)
và phần mềm, là chiếc điện thoại có tỷ lệ giá/hiệu năng tốt nhất hiện nay trên
thế giới.
Tuy vậy, không phải là không có những ý kiến trái ngược. Chúng ta
hãy cùng chờ đợi sự xuất hiện của Pada để trải nghiệm kỹ hơn về hệ điều
hành này.
Kiến trúc - Không gian tên:
1.2 Mô Hình Kiến Trúc.
Các thành phần cơ bản, kiến trúc:
- Kanel.
- Device.
- Service.
- Framework.
Trang 17
Hình 1.2.1. 1: Mô hình kiến trúc bada.Hình 1.2.1.1Kiến Trúc Ứng Dụng Trên BaDA.Hình 1: Kiến Trúc Ứng Dụng Trên BaDA.
![Page 18: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/18.jpg)
1.3 Không Gian Tên.
Các namespace cơ bản của bada:
1.3.1 Osp::Base
Chứa lớp cơ sở của pada.
Chứa các kiểu dữ liệu cơ bản: cấu trúc C++, String, Buffer, DateTime,
TimeSpan, UUID.
Collection: ArrayList, HashMap, LinkedList, Queue, Stack..
Runtime: Timer, Thread, Mutext, Semaphore, Monitor..
Các tiện ích khác như: Mathematical functions, StringTokenizer,
StringUtil…
- Osp::Base::Object.
- Osp::Base::String.
- Osp::Base::Buffer. Có cấu trúc là 1 mảng nhưng chứa vùng đệm
“Buffer” có các thuộc tính sau :
+ Positon : vị trí dữ liệu được đọc/ghi.
+ Limit : thành phần cuối cùng của array.
Trang 18
Hình 1.2.1. 2: các namespace trong bada.Hình 1.2.2.1 Không Gian Tên (Namespace)Hình 2: Kiến Trúc Ứng Dụng Trên BaDA.
![Page 19: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/19.jpg)
+Remaining : thành phần dữ liệu giữa positon và limit.
+ Mark : đánh dấu tại 1 vị trí của position.
+ Capacity : số lượng tối đa của mẫu tin Buffer.
Một số kiểu dữ liệu Buffer khác như : IntBuffer, FloatBuffer,
LongBuffer, McharBuffer.
- Osp::Base::DateTime & TimeSpan : class xữ lý ngày tháng.
- Osp::Base::UuId.
Một số class khác giống như C++.
- Osp::Base::Collection: bao gồm
Interfaces bao gồm :
- ICollection và IEnumerator:
ICollection : là interface cơ bản của class Collection
gồm .GetCount(),GetEnumeratorN().
IEnumerator : là lớp điều khiển của collections:GetCurrent(),
MoveNext(), Reset().
1.3.2 Osp::Io
Quản lý các dữ liệu, file, thư mục, registry.
- Input và output:
File
Directory
Registry
- Osp::Io::Registry: Là một file dùng để chứa các cài đặt của ứng dụng.
-
-
Trang 19
![Page 20: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/20.jpg)
-
-
-
-
1.3.3 Database : SQLite
Create :
Insert Rows :
Update và Delete :
Trang 20
Database db;DbStatement* pStmt;DbEnumerator* pEnum;result r = E_SUCCESS;// Opening databaser = db.Construct(L"/Home/sampleDb", true);// Running SQL command to create a tabler = db.ExecuteSql(L"CREATE TABLE IF NOT EXISTSmyTable1( column0 INTEGER PRIMARY KEY,column1 DOUBLE, column2 TEXT )", true);
db.BeginTransaction();// creating a INSERT statementpStmt= db.CreateStatementN(L"INSERT INTO myTable1(column0, column1, column2) VALUES (?, ?, ?)");for (inti=0; i<10; i++){// binding data for each rowpStmt->BindInt(0, i);// integerpStmt->BindDouble(1, i*0.1);// doublepStmt->BindString(2, L”InitialData”);// String
// Reading value at section1->s1key1.// if not exist, making oneRegistry reg;String regName(L"/Home/regTest.ini");String sect1(L"section1");// section nameString key1(L"s1key1");// key nameintiVal;// create a new registry if not existsif( IsFailed(reg.Construct(regName, true))) gotoCATCH;// create a section. If exist, it will do nothingreg.AddSection(sect1);// section1 s1key1 = 999if( IsFailed(reg.AddValue(sect1,key1,999))) gotoCATCH;// Get intvalue from the section1 s1key1reg.GetValue(sect1, key1, iVal);return;CATCH:// do something
![Page 21: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/21.jpg)
Search database
1.3.4 Osp::Test và Osp::Locales
Quản lý các phần như: Encoding, locales,…
1.3.5 Osp::System
Quản lý thông tin hệ thống như: systemtime, systemInfo, RuntimeInfor,
Battery,…
Các điều khiển như: báo rung, báo động…
1.3.6 Osp::App
Điều khiển vòng đời của ứng dụng.
Trang 21
// updating rowsdb.BeginTransaction();db.ExecuteSql(L"UPDATE myTable1SET column2 = „Converted Data‟WHERE column2 = „Initial Data ", true);‟db.CommitTransaction();// deleting a rowdb.BeginTransaction();db.ExecuteSql(L"DELETE FROM myTable1WHERE column0 = 1&", true);
Databasedb;DbStatement* dStmt= null;DbEnumerator* dEnum= null;// Loading DBdb.Construct(String(L"dbFile"), true);// Create statementString stmt(L"SELECT * FROM member WHERE Address = ?");dStmt= db.CreateStatementN(stmt);// Bind query stringdStmt->BindString(0, String(L"Seattle"));// Execute statement and get datadEnum= db.ExecuteStatementN(*dStmt);dEnum->MoveNext();intcolumnCount= dEnum->GetColumnCount();// Get a value from the second columnString name;pEnum->GetStringAt(1, name);
![Page 22: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/22.jpg)
1.3.7 Osp::Net :
Hỗ trợ điều khiển các kết nối như: Wi - fe, HTTP, Bluetooth.
Quản lý các kết nối mạng:
1.3.8 Osp::Telephony
Quản lý các hàm như: Call, 3G,Sim…
1.3.9 Osp::Sercurity
Các hàm liên quan đến bảo mật...
1.3.10 Osp::Graphics
Đồ họa 2D : màu sắc, fonts, Bitmap, drawing.
Đồ họa 3D : OpenGL|ES, EGL.
1.3.11 Osp::UI:
Form và Frame.
Control, keypad,…
1.3.12 Osp::Uix
Sử dụng các tính năng nâng cao của điện thoại như :
Cảm biến, thời tiết, độ rung, chuyển động và nhận dạng khuôn mặt.
Osp::Media
Các phương thức liên quan đến đa phương tiện
Recoding, camera, audio I/O.
1.3.13 Osp:Web :
Các phương thức điều khiển như:
Webcontrol, download, Javascript.
Namespace truy xuất liên quan đến các dịch vụ của pada:
Trang 22
![Page 23: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/23.jpg)
1.3.14 Osp::Social :
Quản lý thông tin của người dùng đang tương tác đến dịch vụ : Contract,
event, to – do, log.
Quản lý dịch vụ / các giao tiếp trong nền tảng đám mây: các thông tin tài
khoản người dùng, bạn bè, kết nối SNS gateway.
1.3.15 Osp::Content :
Quản lý nội dung và tính năng tìm kiếm trên điện thoại và đám mây.
1.3.16 Osp::Locations :
Quản lý các thông tin cơ bản về định vị vị trí của người dùng như : Map UI,
vị trí địa lý, các dịch vụ định vị.
1.3.17 Osp::Messaging :
Các thông tin về Messaging.
1.3.18 Osp::Commerce :
Các ứng dụng thương mại trên AppStore.
Trang 23
![Page 24: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/24.jpg)
1.4 Môi trường phát triển.
Hình 1: Các thư mục trong ứng dụng bada.
Mô Tả :
/Includes : chức các thư viện trong pada.
/inc, /src : là implement và header của ứng ụng.
/Home :
Thư mục chứa dữ liệu ứng dụng của bạn.
Là folder sẽ được copy sang điện thoại của bạn/ Simulator.
Có thể đọc/ghi ứng dụng.
/Icons : chứa các icons của ứng ụng.
/Res : chứa các file thiết kế giao diện, hình ảnh trong ứng dụng.
Trang 24
![Page 25: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/25.jpg)
Mô hình ứng dụng trên Pada.
Hình 2: Vòng đời của ứng dụng trên Bada.
1.4.1 Vòng đời của ứng dụng
Launch :
+ OnAppInitialization.
+ OnForeground.
Running :
+ OnBackground.
+ OnForeground.
Trang 25
![Page 26: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/26.jpg)
Hình 3: Liên Quan Giữa Vòng Đời Và Sự Kiện
Terminated :
+ OnAppTerminating.
1.4.2 Sự kiện trên pada
void Test::OnLowMemory(): giải phóng tài nguyên không cần thiết.
void Test::OnBatteryLevelChanged(BatteryLevellevel): dừng camera, lặp lại
mp3, …
void Test::OnScreenOff() : giải phóng tài nguyên (3D, cảm biến) đưa vào chế
độ ngủ để tiết kiệm pin.
void Test::OnScreenOn() : lấy lại các tài nguyên đã dừng và tiếp tục sử dụng
nếu bị giải phóng bới OnScreenOff.
Chu trình sống của form và các controls khác :
OnInitializing : được gọi để thêm một forms vào frame.
OnTerminatingwhen : gọi khi cần xóa forms.
Trang 26
![Page 27: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/27.jpg)
Một số sự kiện khác khi người dùng tác động vào forms:
Hình 4: Sự kiện khởi tạo và giải phóng trên bada.
Chúng ta có đoạn mô tả sau :
- Form Initialization :
result TestForm::OnInitializing(void)
{
result r = E_SUCCESS;
// Find the button from loaded UI file
__pButtonOk= static_cast<Button *>
(GetControl(L"IDC_BUTTON_OK"));
// If success to find, set action
if (__pButtonOk!= null)
{
__pButtonOk->SetActionId(ID_BUTTON_OK);
__pButtonOk->AddActionEventListener(*this);
}
Trang 27
![Page 28: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/28.jpg)
return r;
}
- Event Listener :
// As this class is set to be a listener of the button,
// a function “OnActionPerformed” must be implemented
void TestForm::OnActionPerformed(
const Osp::Ui::Control& source, intactionId)
{
switch(actionId)
{
// If this function is called by the button
// as we set in the previous slide
case ID_BUTTON_OK:
// print some here. See Output window of IDE
AppLog("OK Button is clicked! \n");
break;
default:
break;}}
-
OnTerminating : giải phóng bộ nhớ khỏi forms
// At termination time,
Trang 28
![Page 29: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/29.jpg)
// Nothing specific to do
result TestForm::OnTerminating(void)
{
result r = E_SUCCESS;
return r;
}
1.5 Các Đặc Điểm Và ConTrols Trong Pada
1.5.1 Đặc Điểm Giao Diện Trên Pada:
Hình 5: Mô hình giao diện trên bada.
- Frame: chạy phía trên mỗi cửa sổ, mỗi ứng dụng chỉ có 1 Frame.
- Form: quản lý tất cả các controls như : Titlebar, OptionMenu,
SoftKeys & Tab
- Controls : chứa các cấu trúc bên trong của controls.
- Một số phương thức quan trọng để lấy thông tin của ứng dụng :
Trang 29
![Page 30: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/30.jpg)
- GetBounds(), GetWidth(), GetHeight()
- GetClientAreaBounds()
Hình 6: Client Area của ứng dụng.
Cách sử dụng Frame :
o Lấy thông tin của 1 frame : GetAppFrame()->GetFrame();
o Vẽ lên đối tượng lên Frame : GetCanvasN() : hàm này trả về
một canvas của Frame.
- Thêm vào 1 Form và hiển thị
AddControl(aForm), SetCurrentForm(aForm)
Cách sử dụng Form :
- Có thể sử dụng Form với 1 mẫu có sẳn.
Bổ sung 2 phương thức : OnInitializing()và OnTerminating()
- OnInitializing():
Thêm Controls vào Form.
Đặt text softkey vào trong Form
Đặt action id vào keys.
Trang 30
![Page 31: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/31.jpg)
Đăng ký sự kiện cho mỗi action.
Khởi tạo toàn bộ dữ liệu của Form.
Thêm phương thức để lắng nghe sự kiện trên Form.
- OnTerminating() : giải phóng cấp phát bộ nhớ cho Form.
Hình 7: OptionMenu .
- Phương thức OnInitializing.
Trang 31
class FormExample:// It is form and need to listen eventspublic Osp::Ui::Controls::Form,public Osp::Ui::IActionEventListener{public:FormExample(void) {};virtual ~FormExample(void) {};protected:// event id for soft-keysstatic const intID_SOFTKEY_OK = 101;static const intID_SOFTKEY_CANCEL = 102;public:// initialization functionvirtual result OnInitializing(void);// listening functionvirtual void OnActionPerformed(const Control& src,intactionId);};
![Page 32: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/32.jpg)
- Phương thức OnActionPerformed : đăng ký sự kiện trên Form.
- Thêm Form vào Frame.
Trang 32
return r = E_SUCCESS;// Set a title text & soft-key textSetTitleText("My Form");SetSoftkeyText(SOFTKEY_0, "OK");SetSoftkeyText(SOFTKEY_1, "CANCEL");// Assign an action ID of SoftkeySetSoftkeyActionId(SOFTKEY_0, ID_SOFTKEY_OK);SetSoftkeyActionId(SOFTKEY_1, ID_SOFTKEY_CANCEL);// Register an event listenerAddSoftkeyActionListener(SOFTKEY_0, *this);AddSoftkeyActionListener(SOFTKEY_1, *this);// This is right place to create and add controlsreturn r;
void FormExample::OnActionPerformed(const Control& src,intactionId){switch (actionId){case ID_SOFTKEY_OK:// Todo:break;case ID_SOFTKEY_CANCEL:// Todo:break;default:break;}}
// Usually OnAppInitializing// Creating a formFormExample* form=new FormExample();// Note that all controls must be on the heap!form->Construct(FORM_STYLE_TITLE|FORM_STYLE_SOFTKEY_0|FORM_STYLE_SOFTKEY_1|FORM_STYLE_INDICATOR);// Getting application frameFrame* frame = GetAppFrame()->GetFrame();// Adding frameframe->AddControl( *form );// Making the form as the current form from many formsframe->SetCurrentForm( *form );frame->RequestRedraw(true);
![Page 33: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/33.jpg)
1.5.2 Một Số Control cơ bản trong pada:
1.5.2.1 List :
Khai báo đối tượng list trong header Form:
Tùy chọn các Element :
Trang 33
// creating and setting up a list for example// creating it on the heapList* list = new List();list->Construct( Rectangle(..), LIST_STYLE_NORMAL,...);list->AddItemEventListener( aEventListeningObject);// adding the list to the Formform->AddControl( *list );
// Declaring the form as a event listenerclass TestForm: ...public ICustomItemEventListener{...// Element interactionvoid OnItemStateChanged(const Control &source,intindex, intitemId, intelementId,ItemStatusstatus);// Item-wise interactionvoid OnItemStateChanged(const Control &source,intindex, intitemId, ItemStatusstatus);
![Page 34: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/34.jpg)
Khởi tạo custom list
Khởi tạo Item và add item vào List:
Trang 34
// Custom drawing element// We will discuss 2D drawing laterclass MyElement: public ICustomListElement{public:MyElement( inti){....};result DrawElement(const Osp::Graphics::Canvas& canvas, const Osp::Graphics::Rectangle& rect, CustomListItemStatusitemStatus){Canvas* pCanvas= const_cast<Canvas*>(&canvas);// Drawing Custom element with Canvas(2D graphics)return E_SUCCESS;}};20
result TestForm::OnInitializing( void ){...// Creating and constructing a listCustomList* pList= new CustomList();pList->Construct( Rectangle( 0, 0, 480, 600 ),CUSTOM_LIST_STYLE_NORMAL, false);// Setting event listenerpList->AddCustomItemEventListener( *this );
CustomListItemFormat* pFormat= new CustomListItemFormat();pFormat->Construct();pFormat->AddElement(0, Rectangle(0, 0, 100, 100));pFormat->AddElement(1, Rectangle(120, 10, 310, 60),50, Color::COLOR_WHITE, Color::COLOR_BLUE);pFormat->AddElement(2, Rectangle(120, 65, 310, 90),25, Color::COLOR_YELLOW,Color::COLOR_BLUE);// Enabling interaction for the custom elementpFormat->SetElementEventEnabled( 0, true );
![Page 35: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/35.jpg)
Sự Kiện Trên List : OnItemStateChanged() : được gọi khi có 1 item
được chọn.
Số lượng Item :GetItemCount()
Lấy Item được check : GetFirstCheckedItem(),
GetNextCheckedItem(), GetLastCheckedItem(), IsItemChecked()
Trang 35
// Creating items and adding to the listfor( inti=0; i<10; i++ ) {// creating & construct with an item heightCustomListItem* item = new CustomListItem();item->Construct(100);item->SetItemFormat( *pFormat);// Creating custom drawing element and adding itMyElement* myElement= new MyElement( i);item->SetElement( 0, *((ICustomListElement*)myElement) );// other elementsString name(“Name “); name.Append(i);item->SetElement( 1, name );item->SetElement( 2, “Subtitle” );pList->AddItem( *item, i);}this->AddControl( *pList);return r;}
![Page 36: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/36.jpg)
Hình 8: Danh sách các list trong Pada.
1.5.2.2 EditField & EditArea
Khởi tạo và cấp phát :
EditField& editField= *(new EditField);
editField.Construct( Rectangle(0,100,480,100 ) );
Thêm sự kiện và set các propertise :
editField.AddTextEventListener( *this );
editField.SetName( “EditField1” );
Add Edittext vào Form: this->AddControl( editField);
Trang 36
// Declaring the form as a text field listenerclass TestForm: public Form, public ITextEventListener..{ ...void OnTextValueChanged(const Control& source);void OnTextValueChangeCanceled(const Control& source);...};void TestForm::OnInitializing( void ) { ...// creating an edit fieldEditField& editField= *(new EditField());editField.Construct(Rectangle(0,100,480,100));// Setting event listener & nameeditField.AddTextEventListener( *this );editField.SetName(“EditField1”);// adding the edit field to the formthis->AddControl( editField);...
![Page 37: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/37.jpg)
1.5.2.3 Button :
Cấu trúc phương thức Listener :
1.5.2.4 SlidableList:
Hình 9: lidableList
Trang 37
// Declaring the form as a text field listenerclass TestForm: public Form, public ITextEventListener..{ ...void OnTextValueChanged(const Control& source);void OnTextValueChangeCanceled(const Control& source);...};void TestForm::OnInitializing( void ) { ...// creating an edit fieldEditField& editField= *(new EditField());editField.Construct(Rectangle(0,100,480,100));// Setting event listener & nameeditField.AddTextEventListener( *this );editField.SetName(“EditField1”);// adding the edit field to the formthis->AddControl( editField);...
Button& button = *(new Button);button.Construct(rectangle, “”);// setting a prepared bitmap to button// we will discuss about bitmap, laterbutton.SetNormalBitmap(position,bitmap);// setting action id and listenerbutton.SetActionId(actionID);button.AddActionEventListener(listener);// adding the button to a form (this)this->AddControl(button);
// Element interactionvoid TestForm::OnItemStateChanged(const Control &source,intindex, intitemId, intelementId,ItemStatusstatus){AppLog(“Element of %d item”, itemId);}// Item-wise interactionvoid TestForm::OnItemStateChanged(const Control &source,intindex, intitemId, ItemStatusstatus){AppLog(“%d-thitem”, itemId);}
![Page 38: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/38.jpg)
- Khởi tạo Item:
- Listener:
Trang 38
result TestForm::OnInitializing(void) {...// Create a SlidableListpList= new SlidableList();pList->Construct(Rectangle(0, 0, 480, 500),CUSTOM_LIST_STYLE_NORMAL);pList->AddCustomItemEventListener(*this);pList->AddSlidableListEventListener(*this);// Preparing a formatpFormat= new CustomListItemFormat();pFormat->Construct();pFormat->AddElement(0,Rectangle(10, 25, 200, 80));...// Add the SlidableListto the FormAddControl(*pList);...}
// A function to create an itemCustomListItem* TestForm::CreateItem(String text1, .. ){// creating and construct an itemCustomListItem* pItem= new CustomListItem();pItem->Construct(HEIGHT);// setting up the itempItem->SetItemFormat(*pCustomListItemFormat);pItem->SetElement(0, text1);...return pItem;}// Implementation of an ISlidableEventListenervoid TestForm::OnListPropertyRequested(const Control &s){// setting the total count and the height of itemspList->SetItemCountAndHeight(COUNT, COUNT*HEIGHT);}
void TestForm::OnLoadToBottomRequested(const Control &src, intindex, intnumItems){// For the requested indicesfor(inti= index; i< index + numItems; i++){String text = "ITEM_";text.Append(i);// Creating and adding the item to the list// i+1 is the id of the itempList->LoadItemToBottom(*CreateListItem(text,...), i+1);}}
![Page 39: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/39.jpg)
1.5.2.5 MenuOption:
Hình 10: Option Menu
Trang 39
void TestForm::OnLoadToTopRequested(const Control &source, intindex, intnumItems){// For the items requested// Note: it is reverse orderfor(inti= index; i> index -numItems; i--){String text = "ITEM_";text.Append(i);// Creating the item and adding it to the list// i+1 is the id of the itempList->LoadItemToTop(*CreateListItem(text,..), i+1);}}
void TestForm::OnUnloadItemRequested(const Control& source, intitemIndex){// Release resources of the specified item// Do not worry about the resources added to// the list item (elements):// there are freed automatically}
![Page 40: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/40.jpg)
Trang 40
class OForm: ... {void ShowHideOptionMenu(boolshow);...OptionMenu* optionMenu;};OForm::Construct(){// add option key to form stylereturn Form::Construct(....|FORM_STYLE_OPTIONKEY);}OForm::OnInitializing(void) { ...// Creating an OptionMenuoptionMenu= new OptionMenu();optionMenu->Construct();optionMenu->AddItem(“Item1”,1);optionMenu->AddItem(“Item2”,2);SetOptionKeyActionId(100);AddOptionKeyActionListener(*this);}
void OForm::ShowHideOptionMenu( boolshow ) {optionMenu->SetShowState( show );if( show ) optionMenu->Show();else Show();}void OForm::OnActionPerformed(const Control& s, intid){switch( id ){case 100: ShowHideOptionMenu( true ); break;case 1://do some action herebreak;case 2: //do some action herebreak;}}result OForm::OnTerminating(){ ...delete optionMenu; ...}
![Page 41: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/41.jpg)
1.5.2.6 Tab
Hình 11: Tab trong Bada
1.5.2.7 Multiple Form
Trang 41
TForm::Construct(){// adding tab to form stylereturn Form::Construct(....|FORM_STYLE_TEXT_TAB);}OForm::OnInitializing(void) { ...Tab* tab = GetTab();if( tab ){// adding tab itemstab->AddItem(“Genre”, 0);tab->AddItem(“Artist”, 1);tab->AddActionEventListener(*this);}...}void TForm::OnActionPerformed(const Control& s, intid){switch( id ){case 0: // show hide some controlsbreak;case 1: // show hide some controlsbreak;}}
![Page 42: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/42.jpg)
Trang 42
// The function to switch form available from the outsideresult MyApp::MoveToForm( inti){// checking the id is validif( i<0 || i>=2 ) return E_OBJ_NOT_FOUND; // exception// Get pFrameof the applicationFrame* pFrame= GetAppFrame()->GetFrame();// Setting the current formpFrame->SetCurrentForm( *form[i] );// Force the frame to redrawpFrame->RequestRedraw();return E_SUCCESS;}
// Usually on some event// (action event listener for example)void Form1::OnActionEventListener( ... )...if( ... ){MyApp* app = (MyApp*)GetInstance();app->MoveToForm( 1 );}...}
class Form1: .... { ...};class Form2: .... { ...}// in the <App>.hclass MyApp: ...{...private:// Form arrayForm* form[2];...public:result MoveToForm( inti);};
MyApp::OnAppInitializing( ... ){...// Creating two forms (which are member variable now)form[0] = new Form1();((Form1*)form[0])->Initialize();form[1] = new Form2();((Form2*)form[1])->Initialize();...
![Page 43: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/43.jpg)
1.6 Webservice deCarta.
1.6.1 Giới Thiệu deCarta:
deCarta là một dịch vụ được hỗ trợ rất mạnh về tính năng định vị trên pada,
để truy cập được thư viện trên deCarta cần có 1 tài khoản trên trang chủ
http://developer.decarta.com/ .
1.6.2 Cách Kết Nối
Sử dụng phương thức :
Địa chỉ truy cập URL sẽ thay đổi theo phiên bản sau :
Host URL Compatible
version
Feature
http://developer.kr.dz.decarta.com/openls/openls bada1.0
http://samsungcdn.vip.decartahws.com/openls/openls bada1.1 and
later
CDN
support
Trang 43
ProviderManager::ConnectToServiceProviderN(const
Osp::Base::String & name, LocationServiceProviderType type,
const Osp::Base::String & extraInfo)
Ví dụ:
ProviderManager::ConnectToServiceProviderN(L“deCarta”,
LOC_SVC_PROVIDER_TYPE_MAP,
L“ClientName=<client_name>;ClientPassword=<client_password>;
HostUrl=http://developer.kr.dz.decarta.com/openls/openls”);
MyApp::OnAppInitializing( ... ){...// Creating two forms (which are member variable now)form[0] = new Form1();((Form1*)form[0])->Initialize();form[1] = new Form2();((Form2*)form[1])->Initialize();...
![Page 44: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/44.jpg)
Bảng 1: Bảng truy cập máy chủ dịch vụ.
1.6.3 Thư viện hỗ trợ deCarta:
Mô Tả Thư Viện
Nơi bắt đầu của toàn bộ vị trí trong ứng
dụng.
LocationProvider
Chứa thông tin về vị trí trong ứng dụng. Location
Thông tin kinh tuyến, vĩ tuyến, độ cao. Coordinates
Thông tin về kinh tuyến, vĩ tuyến, độ
cao và độ chính xác của thông tin của
ứng dụng.
QualifiedCoordinates
Thông báo cho người dùng biết ranh
giới trên bản đồ địa lí.
IAreaListener
Quản lý thông tin khi người dùng thay
đổi vị trí trên bản đồ.
ILocationListener
Quản lý phương thức đánh dấu vị trí
trên bản đồ.
Landmark
Quản lý dịch vụ Landmark và các
phương thức để quản lý Landmark.
LandmarkStore
Thông tin từ vị trí trên bản đồ sang vị
trí thật của địa lí.
AddressInfo
Quản lý các khu vực địa lý và ranh giới
giữa chúng dựa trên tiêu chuẩn WGS 84
Ellipsoid.
GeographicArea
Cung cấp các phương thức để tìm kiếm
các vị trí Landmark trên bản đồ.
IlandmarkSearchListener
Quản lý thông tin dịch vị định vị và
truyền thông tin đó cho dịch vụ khác.
RemoteLocationProvider
Cung cấp một đối tượng để lấy thông
tin về ID người dùng và thông tin dịch
vụ.
TargetInfo
Trang 44
![Page 45: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/45.jpg)
Cung cấp thông tin cho dịch vụ. TraceServiceInfo
Cung cấp dịch vụ để lắng nghe và báo
cáo vị trí lên badaServer.
ILocationResportListener
Cung cấp dịch vụ để lắng nghe khi
người dùng lấy thông tin vị trí cuối từ
server.
IRemoteLocationListener
Cung cấp dịch vụ theo dõi sự kiện vị trí
của người dùng.
ITraceServiceListener
Cung cấp thông tin Landmark và
phương thức CRUD.
RemoteLandmarkStore
Quản lý thông tin Landmark của dịch
vụ.
IRemoteLandmarkStoreListener
Bảng 2: Các thư viện hỗ trợ deCarta.
1.6.4 Sơ Đồ Class Trong Webservice.
Sơ đồ 1: Sơ đồ quan hệ giữa các class 1.
Trang 45
![Page 46: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/46.jpg)
Sơ đồ 2: Sơ đồ quan hệ giữa các class 2.
Sơ đồ 3: Sơ đồ quan hệ giữa các class 1.
Trang 46
![Page 47: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/47.jpg)
1.6.5 Location
Mô hình dữ liệu
Sơ đồ 4: Sơ đồ dữ liệu trong class Location
Có 3 phương thức hỗ trợ chế độ kết nối:
LOC_METHOD_GPS: hỗ trợ GPS.
LOC_METHOD_WPS: hỗ trợ Wi-Fi và cell-based positioning.
LOC_METHOD_HYBRID: Hỗ trợ cả GPS và WPS .
1.6.6 LocationProvider
- LocationProvider là nơi bắt đầu của mỗi ứng dụng sử dụng dịch vụ
map trên pada.
- Lấy thông tin về vị trí : Sử dụng phương thức
- LocationProvider::Construct(LOC_METHOD_HYBRID)
- Lấy thông tin định kỳ :
- Tạo class và kế thừa phương thức bên trong class ILocationListener.
- Khởi tạo Location Provider sử dụng phương thức :
LocationProvider::Construct()
- Sử dụng phương thức để cập nhật thông tin vị trí mỗi 5giây :
LocationProvider::RequestLocationUpdates().
Trang 47
![Page 48: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/48.jpg)
1.7 Kỹ Thuật Phân Tích File XML Sử Dụng Xpath.
1.7.1 Định Nghĩa:
Định dạng XML: Dùng để lưu trữ và biểu diễn dữ liệu, đặc biệt quan trọng
với các dữ liệu trên Web.
1.7.2 Xử lý file XML với libxml
3 kiểu dữ liệu cơ bản:
+ xmlChar: Kiểu dữ liệu cơ bản, lưu trữ 1 bye trong UTF-8 Encoding
+ xmlDoc: Cấu trúc dữ liệu chứa tree của xml doc được parsed. xmlDocPtr
để lưu trữ con trỏ tới xmlDoc
+ xmlNode và xmlNodePtr: Lưu trữ 1 sing node trong cây
Cấu Trức 1: Parse một xml file, trả về con trỏ xmlDocPtr, nếu văn bản không
được parse thành công trả về NULL.
Thêm các dòng #include sau vào đầu các file
Cấu Trúc 2: Tìm một node với tên cho trước, trả về con trỏ xmlNodePtr
Trang 48
<?xml version="1.0"?><note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body></note>
// Return a pointer of type xmlDocPtr point to xmlDoc// @docname: xml document namexmlDocPtr getDoc( const char* docname ) { xmlDocPtr doc; doc = xmlParseFile( docname ); if ( doc == NULL ) { cerr << "Document not parsed successfully" << endl; return NULL; } return doc;
![Page 49: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/49.jpg)
Cấu Trúc 3: Tìm node anh em của một node, với tên node được cho trước
(Sử dụng hàm next())
Cấu Trúc 4: Trả về giá trị của một attribute của một node, tên cho trước
Cấu Trúc 5: Lấy text content của một node
Trang 49
// Return a pointer to xmlNodePtr// Find the child node with name node_namexmlNodePtr getChildNode( xmlNodePtr parent, string node_name ) { xmlNodePtr cur = parent->xmlChildrenNode; while ( cur != NULL ) { if ( !xmlStrcmp( cur->name, ( xmlChar* ) node_name.c_str() ) ) { return cur; } cur = cur->next; } return NULL;}
// Get sibling node with @node_namexmlNodePtr getSiblingNode( xmlNodePtr a_node, string node_name ) { xmlNodePtr cur = a_node->next; while ( cur != NULL ) { if ( !xmlStrcmp( cur->name, ( xmlChar* ) node_name.c_str() ) ) { return cur; } cur = cur->next; }
// Get attribute value of @att_namestring getAttrStr( xmlNodePtr cur, string att_name ) { xmlChar* uri = xmlGetProp( cur, (xmlChar*) att_name.c_str() ); if ( uri == NULL ) { cerr << "Attribute " << att_name << " does not exist" << endl; return ""; } string att_val = (char*) uri; xmlFree(uri); return att_val;}
![Page 50: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/50.jpg)
Cấu Trúc 6: Trả về một tập các node theo xPath
Trang 50
string getElementContent( xmlDocPtr doc, xmlNodePtr cur ) { xmlChar * txt_content = xmlNodeListGetString( doc, cur->xmlChildrenNode, 1); if ( txt_content == NULL ) { cerr << "Text content does not exist!!!" << endl; return ""; } string strContent = (char*) txt_content; trimSpaces( strContent ); xmlFree( txt_content ); return strContent;}
xmlXPathObjectPtr getNodeSet(xmlDocPtr doc, xmlChar* xpath) { xmlXPathContextPtr context; xmlXPathObjectPtr result; context = xmlXPathNewContext( doc ); if ( context == NULL ) { cerr << "Error in xmlXPathNewContext" << endl; return NULL;} result = xmlXPathEvalExpression( xpath, context );xmlXPathFreeContext( context ); if ( result == NULL ) { cerr << "Error in xmlXPathEvalExpression" << endl; return NULL;} if ( xmlXPathNodeSetIsEmpty ( result->nodesetval ) ) { xmlXPathFreeObject( result );// cerr << "No result" << endl; return NULL; } return result;}
![Page 51: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/51.jpg)
Chương 2 : Giới Thiệu Về Android
Chương2 : TỔNG QUAN VỀ ANDROID.
2
2.1 Giới Thiệu
Android là một hệ điều hành di động dựa trên nền tảng linux phiên
bản 2.6 dành cho các dòng điện thoại SmartPhone. Đầu tiên được ra đời bởi
công ty liên hợp Android, sau đó được Google mua lại và phát triển từ năm
2005 và trở thành một hệ điều hành di động mã nguồn mở, miễn phí, mạnh
mẽ và được ưa chuộng cao trên thế giới. Hệ điều hành android một hệ điều
hành rất mạnh mạnh, có bảo mật cao, hỗ trợ được nhiều công nghệ tiên tiến
như 3G, GPS, EDGE, Wifi.. tương thích với nhiều phần cứng, hỗ trợ nhiều
loại bộ nhập dữ liệu như keyboard, touch và trackball. Android là hệ điều
hành di động nên có khả năng kết nối cao với các mạng không dây. Hỗ trợ
công nghệ OpenGL nên có khả năng chơi các phương tiện media, hoạt hình
cũng như trình diễn các khả năng đồ họa khác cực tốt, là tiền đề để phát triển
các ứng dụng có giao diện phức tạp chẳng hạn như là các trò chơi.
Android liên tục được phát triển, mỗi bản cập nhật từ google là mỗi
lần android được tối ưu hóa để hoạt động tốt hơn, nhanh và ổn định hơn, hỗ
trợ thêm công nghệ mới. Chẳng hạn như theo một đánh giá thì android phiên
bản 2.2 hoạt động nhanh hơn bản 2.1 tới 450%. Năm 2008, hệ điều hành
android đã chính thức mở toàn bộ mã nguồn, điều đó cho phép các hãng điện
thoại có thể đem mã nguồn về tùy chỉnh, thiết kế lại sao cho phù hợp với mỗi
mẫu mã điện thoại của họ và điều quan trọng nữa là hệ điều hành mở này
hoàn toàn miễn phí, không phải trả tiền nên giúp họ tiết kiệm khá lớn chi phí
phát triển hệ điều hành. Những điều đó là cực kỳ tốt không chỉ đối với các
hãng sản xuất điện thoại nhỏ mà ngay cả với những hãng lớn như Samsung,
HTC....
Trang 51
![Page 52: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/52.jpg)
2.2 Các Thành Phần Trong Ứng Dụng Android.
Việc hiểu được các thành phần (component) tạo nên một ứng dụng
Android là rất cần thiết cho việc lập trình. Các thành phần này được chia làm
6 loại bao gồm:
2.2.1 Activity
Activity là nền của 1 ứng dụng. Khi khởi động 1 ứng dụng Android
nào đó thì bao giờ cũng có 1 main Activity được gọi, hiển thị màn hình giao
diện của ứng dụng cho phép người dùng tương tác.
2.2.2 Service:
Thành phần chạy ẩn trong Android. Service sử dụng để update dữ
liệu, đưa ra các cảnh báo (Notification) và không bao giờ hiển thị cho người
dùng thấy.
2.2.3 Content Provider.
Kho dữ liệu chia sẻ. Content Provider được sử dụng để quản lý và
chia sẻ dữ liệu giữa các ứng dụng.
2.2.4 Intent:
Nền tảng để truyền tải các thông báo. Intent được sử dụng để gửi các
thông báo đi nhằm khởi tạo 1 Activity hay Service để thực hiện công việc
bạn mong muốn. VD: khi mở 1 trang web, bạn gửi 1 intent đi để tạo 1
activity mới hiển thị trang web đó.
2.2.5 Broadcast Receiver
Thành phần thu nhận các Intent bên ngoài gửi tới. VD: bạn viết 1
chương trình thay thế cho phần gọi điện mặc định của Android, khi đó bạn
cần 1 BR để nhận biết các Intent là các cuộc gọi tới.
2.2.6 Notification
Đưa ra các cảnh báo mà không làm cho các Activity phải ngừng hoạt
động.
Trang 52
![Page 53: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/53.jpg)
2.3 Tiến trình của một ứng dụng android
Activity, Service, Broadcast Receiver và Content Provider mới là
những thành phần chính cấu thành nên ứng dụng Android, bắt buộc phải khai
báo trong AndroidManifest.
Android có cơ chế quản lý các process theo chế độ ưu tiên. Các process
có priority 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.
2.3.1 Foreground process
Foreground process là process của ứng dụng hiện thời đang được
người dùng tương tác.
2.3.2 Visible process
Visible process là process của ứng dụng mà activity đang hiển thị đối
với người dùng (onPaused() của activity được gọi).
2.3.3 Service process
Service process là Service đang running.
2.3.4 Background process
Background process là process của ứng dụng mà các activity của nó ko hiển
thị với người dùng (onStoped() của activity được gọi).
2.3.5 Empty process
Empty process: process không có bất cứ 1 thành phần nào active.
Theo chế độ ưu tiên thì khi cần tài nguyên, Android sẽ tự động kill process,
trước tiên là các empty process.
Trang 53
![Page 54: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/54.jpg)
Hình 12: Biểu đồ vòng đời ứng dụng android
Vòng đời của Activity:
- Entire lifetime: Từ phương thức onCreate( ) cho tới onDestroy( )
- Visible liftetime: Từ phương thức onStart( ) cho tới onStop( )
- Foreground lifetime: Từ phương thức onResume( ) cho tới onPause( )
Khi xây dựng Actitvity cho ứng dụng cần phải viết lại phương thức
onCreate( ) để thực hiện quá trình khởi tạo. Các phương thức khác có cần
viết lại hay không tùy vào yêu cầu lập trình.
Trang 54
![Page 55: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/55.jpg)
2.4 Các Thành Phần Trong Giao Diện.
Hình 13: Cấu trúc một giao diện ứng dụng Android.
2.4.1 ViewGroup
ViewGroup thực ra chính là View hay nói đúng hơn thì ViewGroup chính là
các widget Layout được dùng để bố trí các đối tượng khác trong một screen.
Có một số loại ViewGroup như sau:
2.4.2 LinearLayout
LinearLayout được dùng để bố trí các thành phần giao diện theo chiều ngang
hoặc chiều dọc.
Hình 14: Bố trí các widget sử dụng LinearLayout
2.4.3 FrameLayout
FrameLayout được dùng để bố trí các đối tượng theo kiểu giống như là các
Layer trong Photoshop.
Trang 55
![Page 56: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/56.jpg)
Hình 15: Bố trí widget trong FrameLayout.
2.4.4 AbsoluteLayout
Layout này được sử dụng để bố trí các widget vào một vị trí bất kì trong
layout dựa vào 2 thuộc tính toạ độ x, y.
2.4.5 RetaliveLayout
Layout này cho phép bố trí các widget theo một trục đối xứng ngang hoặc
dọc. Để đặt được đúng vị trí thì các widget cần được xác định một mối ràng
buộc nào đó với các widget khác.
Hình 16: Bố trí widget trong RataliveLayout.
2.4.6 TableLayout
Layout này được sử dụng khi cần thiết kế một table chứa dữ liệu hoặc cần
bố trí các widget theo các row và column.
Trang 56
![Page 57: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/57.jpg)
Hình 17: Bố trí widget trong TableLayout.
2.4.7 Button
Thuộc tính android:onClick="touchMe" được dùng để nắm bắt sự kiện click
vào button.
Thiết kế bằng code Thực ra mà nói thì nếu không phải đòi hỏi phải custom
lại một widget thì không cần phải sử dụng tới code.
2.4.8 ImageButton
Cũng tương tự như Button, ImageButton chỉ có thêm một thuộc tính
android:src = “@drawable/icon” để thêm hình ảnh vào và không có thẻ text
Trang 57
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/cmdButton1"
android:text="Touchme!"
android:onClick="touchMe"/>
public void touchMe(View v){ Button me = (Button) v;
Me.setText(“Touched”); }
Button cmdButton = new Button(this);
![Page 58: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/58.jpg)
Hình 18: ImageButton
2.4.9 ImageView
Được dùng để thể hiện một hình ảnh. Nó cũng giống như ImageButton, chỉ
khác là không có hình dáng của một cái button.
Code:
Hình 19: ImageView và ImageButton.
2.4.10 ListView
Được sử dụng để thể hiện một danh sách các thông tin theo từng cell.
Mỗi cell thông thường được load lên từ một file XML đã được cố định trên
Trang 58
<ImageButton android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/cmdButton1"android:src="@drawable/icon"
android:onClick="touchMe"/>
ImageView iv = new ImageView(this);iv.setImageResource(R.drawable.icon);
![Page 59: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/59.jpg)
đó số lượng thông tin và loại thông tin cần được thể hiện. Để thể hiện được
một list thông tin lên một screen thì cần phải có 3 yếu tố chính:
Data Source
Adapter
Adapter là một class trung gian giúp ánh xạ dữ liệu trong Data Source
vào đúng vị trí hiển thị trong ListView.
Hình 20: Minh họa 1 listview.
2.4.11 TextView
TextView ngoài tác dụng là để hiển thị văn bản thì nó còn cho phép
định dạng nội dung bằng thẻ html.
Nội dung TextView cũng có thể được định dạng bằng thẻ html ngay
trong XML.
2.4.12 EditText
Trong Android đối tượng EditText được sử dụng như một TextField
hoặc một TextBox.
Trang 59
TextView textView = (TextView)findViewById(R.id.textView);
CharSequence styledText = Html.fromHtml("<i>This</i> is some
<b>styled</b> <s>text</s>"); textView.setText(styledText);
![Page 60: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/60.jpg)
2.4.13 CheckBox
Nhận 2 giá trị true hoặc false. Đối tượng CheckBox cho phép chọn
nhiều item cùng một lúc.
Khai báo:
2.4.14 MenuOptions
Trang 60
<EditTextandroid:id="@+id/EditText01"
android:layout_height=" wrap_content"
android:textStyle="bold"
android:textSize="20dip" android:textColor="#000000"
android:text="HelloAndroid!" android:singleLine="true"
android:inputType="textCapWords"/>
CheckBox cb = new CheckBox(Context …); XML: <CheckBox
android:id="@+id/CheckBox01"android:layout_width="wrap_content"
android:layout_height="wrap_content"android:text="Checkme"
android:checked="true"/>
![Page 61: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/61.jpg)
Có 2 cách tạo một MenuOptions: Tạo bằng code:
Hình 21: Minh họa OptionMenu.
Tạo bằng XML
Trang 61
public class Main extends Activity {private int searchBtnId =
Menu.FIRST; private int scheduleBtnId = Menu.FIRST + 1; private int
playBtnId = Menu.FIRST + 2; private int stopBtnId = Menu.FIRST + 3;
private int group1Id = 1;
private int group2Id = 2;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(group1Id,searchBtnId,searchBtnId,"Search");
menu.add(group2Id,scheduleBtnId,scheduleBtnId,R.string.schedule);
menu.add(group2Id,playBtnId ,playBtnId,"Play");
menu.add(group2Id,stopBtnId ,stopBtnId,R.string.stop);
menu.setGroupVisible(1, false); return
super.onCreateOptionsMenu(menu); } }
<?xml version="1.0" encoding="utf-8"?> <menu
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:icon="@drawable/icon" android:title="Item1" android:
orderInCategory="1" android:id="@+id/item1 ">
<item android:title="Item 2" android:id="@+id/item2"
android:orderInCategory="2"> <menu> <item android:id="@+id/item01"
android:title="Sub item 1" android:orderInCategory="1/>
![Page 62: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/62.jpg)
2.4.15 ContextMenu
ContextMenu được sử dụng để hiển thị các tuỳ chọn khi người dùng
nhấn dài vào một cell nào đó trong ListView.
Để tạo một ContextMenu ta cũng có 2 cách giống như tạo
MenuOptions ở trên chỉ khác tên phương thức.
Sẽ được gọi và truyền vào 3 tham số là:
ContextMenu: đối tượng để add các context menu item
View: Đối tượng nơi mà xảy ra sự kiện
ContextMenuInfo: Cho biết vị trí xảy ra sự kiện trong ListView. Để
biết được vị trí xảy ra sự kiện ta làm như sau:
Trang 62
public boolean onCreateOptionsMenu(Menu menu) { new
MenuInflater( getApplication()).inflate(R.menu.menu_options, menu); return
super.onCreateOptionsMenu(menu); }
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo)
AdapterView.AdapterContextMenuInfo info;
try { info = (AdapterView.AdapterContextMenuInfo) menuInfo; } catch
(ClassCastException e) { return; } info.position
![Page 63: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/63.jpg)
Hình 22: ContextMenu.
2.5 Activity Và Intend
2.5.1 Activity
Activity là một thành chính của một ứng dụng Android, được dùng để hiển
thị một màn hình và nắm bắt các hoạt động xảy ra trên màn hình đó. Khi làm
việc với Activity cần nắm bắt được một số kiến thức cơ bản như sau:
Tính liên lạc giữa 2 activity Khi chuyển sang một Activity khác ta có thể gửi
kèm dữ liệu trong intend đó như sau:
Bên phía Activity được khởi động hay được chuyển đế n, có thể lấy dữ liệu
được gửi như sau:
Trang 63
Intend intend = new Intend(this, B.class);
startActivity(intend);
intend.putExtra(“key1”, “value1”); intend.putExtra(“key2”,
23);
getIntend().getExtra().getString(“key1”);
getIntend().getExtra().getInt(“key2”);
![Page 64: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/64.jpg)
2.5.2 Intent
Là một cấu trúc dữ liệu mô tả cách thức, đối tượng thực hiện của một
Activity
Hình 23: Truyền dữ liệu giữa 2 Activity
Dữ liệu của Intend:
Intent về cơ bản là một cấu trúc dữ liệu, được mô tả trong lớp
android.content.Intent.
2.6 Dịch vụ Google Map
2.6.1 Giới thiệu dịch vụ Google Map:
Dịch vụ cơ bản trên google map gồm 2 thành phần là : Api Mapping và Api
location. Các Api này nằm trên 1 gói cài đặt riêng biệt nhau : Api Mapping
nằm trong gói : com.google.android.maps và Api location nằm trên gói :
android.location.Ngoài ra còn có hệ thống định vị toàn cầu GPS
2.6.2 Giới thiệu về Mapping package:
Mapping package là một trong 2 thành phần quan trọng của dịch vụ bản đồ
trên Android. Package này chứa đầy đủ thông tin cần thiết để hiển thị một
bản đồ lên màn hình, xữ lý các tương tác giữa người dùng và bản đồ (như
phóng to, thu nhỏ), hiển thị các dữ liệu tùy biến do người dùng thêm vào. Để
làm được điều đó cần lớp MapView. Để lấy được thông tin từ MapView thì
người dùng cần có 1 key từ google.
2.6.3 MapView và MapActivity:
Trang 64
![Page 65: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/65.jpg)
Để sử dụng MapView, MapActivity cần khai báo trong file
AndroidManifest.xml. Để thiết lập quyền truy xuất cho người dùng.
2.6.4 Sử dụng Overlay
Đây là các thành phần mở rộng do người dùng thêm vào và được hiển thị vị
trí đánh dấu trên bản đồ.
Trang 65
<uses-permission
android:name="android.permission.INTERNET" />
<uses-permission
android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission
android:name="android.permission.ACCESS_COARSE_LOCATION" />
public InterestingLocations(Drawable marker)
{ super(marker);
this.marker=marker;
// create locations of interest
GeoPoint disneyMagicKingdom = new
GeoPoint((int)(28.418971*1000000),(int)(-81.581436*1000000));
GeoPoint disneySevenLagoon = new
GeoPoint((int)(28.410067*1000000),(int)(-81.583699*1000000));
locations.add(new OverlayItem(disneyMagicKingdom ,
"Magic Kingdom", "Magic Kingdom"));
locations.add(new OverlayItem(disneySevenLagoon ,
"Seven Lagoon", "Seven Lagoon"));
populate();
}
![Page 66: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/66.jpg)
List<Address> getFromLocation(double latitude, double longitude, int
maxResults)
List<Address> getFromLocationName(String locationName, int
maxResults, double lowerLeftLatitude, double lowerLeftLongitude, double
upperRightLatitude, double upperRightLongitude)
List<Address> getFromLocationName(String locationName, int
maxResults)
Hình 24: Đánh dấu vị trí trên bản đồ.
2.6.5 Package Location
Chứa trong nó 2 thành phần quan trọng là class Geocoder và dịch vụ
LocationManager.
Class Geocode: là lớp quản lý việc chuyển đổi qua lại giữa địa chỉ (hoặc vị
trí) sang kinh tuyến và vĩ tuyến hoặc ngược lại. Lớp này bao gồm các
phương thức sau:
Trang 66
List<Address> addressList =geocoder.getFromLocationName(locationName, 5);if(addressList!=null && addressList.size()>0){
int lat = (int)addressList.get(0).getLatitude()*1000000;int lng = (int)addressList.get(0).getLongitude()*1000000; GeoPoint pt = new GeoPoint(lat,lng);mapView.getController().setZoom(10);mapView.getController().setCenter(pt);mapView.getController().animateTo(pt);
}
![Page 67: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/67.jpg)
2.6.6 View Trong Map Google
Các kiểu View:Google Maps cung cấp cho chúng ta 3 tùy chọn để
xem GoogleMaps là StreetView, SatelliteView và TrafficView.
Hình 25: SatelliteView
Trang 67
![Page 68: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/68.jpg)
Hình 26: TrafficView
StreetView ( hiện tại chỉ hỗ trợ ở 1 số nước Châu Âu vì Google phải sử dụng
xe chuyên dụng để chụp ảnh tất cả các tuyến đường nên rất mấy thời gian )
Khi lập trình các muốn view theo kiểu nào thì chỉ cần sử dụng phương
thức tương ứng:
Trang 68
mapView.setSatellite(true);mapView.setStreetView(true);mapView.setTraffic(true);
Hình 27: TrafficView
![Page 69: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/69.jpg)
2.6.7 Xác định vị trí trên Google Maps:
Tọa độ 1 điểm trên GoogleMaps được xác định bằng 2 thông số là
Kinh độ (Longitude ) và Vĩ độ ( Latitude ). Để hiện thị 1 điểm trên
GoogleMaps cần biết được 2 thông số này của vị trí đó.
2.7 Kỹ Thuật Phân Tích JSON.
2.7.1 Khái niệm:
Viết tắt của JavaScript Object Notation (phiếu đối tượng JavaScript)
Nó là một chuẩn để định dạng dữ liệu, về mặt này có thể so sánh JSON với
XML YAML… Nhưng khi JSON đi với JavaScript hoặc ActionScript thì nó
có tính ưu việt hơn hẳn.
2.7.2 Cách thức sử dụng JSON
Khi sử dụng JSON với JavaScript hay ActionScript, không cần phải
có các bước phân tích phức tạp như đối với XML. Mà có thể truy vấn trực
tiếp giá trị theo tên (khóa) được định nghĩa trong JSON.
Bạn có một dữ liệu XML:
JSON là một chuẩn cực kỳ quan trọng trong lập trình webclient.
Tương tác client-server (ajax chẳng hạn) với JSON đỡ rườm rà hơn sử dụng
XML rất nhiều.
Đối với lập trình viên client script. JSON rút ngắn thời gian viết mã
JavaScript, ActionS hơn là sử dụng XML.
Trang 69
GeoPoint p;String coordinates[] = {"21.036074","105.833636"};double latiTude = Double.parseDouble(coordinates[0]);double longiTude = Double.parseDouble(coordinates[1]);p = new GeoPoint((int)(latiTude * 1E6) ,(int)(longiTude * 1E6));
<data><x>2</x><y>3</y></data>
![Page 70: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/70.jpg)
Đoạn code sau mô tả phân tích 1 địa chỉ sang đối trượng JSON trong
android
Trang 70
public JSONObject getLocationInfo(String address) {String compare = address.replace(" ","+");String a
="http://maps.google.com/maps/api/geocode/json?address="+compare+",hochiminh,vn&sensor=false";
HttpGet httpGet = new HttpGet(a);HttpClient client = new DefaultHttpClient();HttpResponse response;StringBuilder stringBuilder = new StringBuilder();try {
response = client.execute(httpGet);HttpEntity entity = response.getEntity();InputStream stream = entity.getContent();int b;while ((b = stream.read()) != -1) {
stringBuilder.append((char) b);}
} catch (ClientProtocolException e) {} catch (IOException e) {}
JSONObject jsonObject = new JSONObject();try {
jsonObject = new JSONObject(stringBuilder.toString());
} catch (JSONException e) {// TODO Auto-generated catch blocke.printStackTrace();
}
return jsonObject;
![Page 71: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/71.jpg)
Chương 3 : GIỚI THIỆU BÀI TOÁN VÀ ỨNG DỤNG
3
3.1 GIỚI THIỆU BÀI TOÁN
- Dịch vụ bản đồ là một trong những dịch vụ khá quan trọng, giúp
người dùng có thể tìm kiếm thông tin về vị trí cũng như tìm đường đi,
các loại bản đồ hiện nay chưa đáp ứng đủ nhu cầu của người dùng
như tìm kiếm địa điểm các điểm kẹt xe, tuyển sinh…Ứng dụng
“LocationV10” giúp người dùng có thể tương tác một cách dể dàng
hơn, phần mềm “LocationV10” tương tác trên hệ máy chạy android,
và samsung Ware 1.0.
3.2 PHÁT BIỂU BÀI TOÁN
3.2.1 Khảo sát hiện trạng
- Với nhu cầu hỗ trợ việc tìm kiếm địa điểm một cách nhanh chóng và
thuận tiện, chính xác, tương tác trên nhiều hệ máy khác nhau. Hệ
thống có khả năng tích hợp các công nghệ thành 1 ứng dụng. Vấn đề
đặt ra là việc tích hợp nhiều nền tảng phục vụ cho con người.
Trang 71
![Page 72: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/72.jpg)
3.2.2 Yêu cầu hệ thống
- Người dùng cần trang bị máy điện thoại chạy hệ điều hành Android
1.5, cần kết nối Internet, GPS.
- Điện thoại Samsung Ware phiên bản 1.0.
3.3 Xác định actor và usercase.
3.3.1 Danh sách Actor
STT Tên Actor Ý nghĩa/Ghi chú
1 Người dùng Người dùng sử dụng điện thoại truy cập thông tin.
2 Người quản trị hệ thống Người quản trị sử dụng website cập nhật thông tin
3.3.2 Sơ đồ usercase
3.3.3 Danh sách usercase
3.3.3.1 Usercase của actor Admin
STT Tên Use-case Ý nghĩa/Ghi chú
1 ThemViTri Thêm một tọa độ vào bản đồ.
Trang 72
Them
XoaAdmin
ViTriHienTai
TimKiemDiaDiem
TimKiemDuongDi
TimKiemViTri
NguoiDung
Sơ đồ 5: Usecase Admin
Sơ đồ 6: Usecase Người dùng
![Page 73: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/73.jpg)
2 XoaViTri Xóa một vị trí cần chọn.
3.3.3.2 Usercase của actor Người dùng
STT Tên Use-case Ý nghĩa/Ghi chú
1 ViTriHienTai Hiển thị vị trí hiện tại của người dùng.
2 TimKiemDiaDiem Hiển thị vị trí đã được đánh dấu trước.
3 TimKiemDuongDi Tìm kiếm đường đi giữa 2 điểm.
4 TimKiemViTri Tìm kiếm một vị trí do người dùng chọn.
Đặc tả usercase.
Đặc tả Usecase “Them”
Tóm tắt
Người quản trị thêm một vị trí vào bản đồ
Dòng sự kiện
Dòng sự kiện chính :
Trên website người dùng chọn 1 vị trí cần thêm vào.
Hiển thị tọa độ tương ứng với vị trí đó.
Kết thúc UseCase.
Dòng sự kiện khác: không có
Các yêu cầu đặc biệt:
Không có
Trạng thái hệ thống khi bắt đầu thực hiện Usecase:
Người dùng chọn vị trí trên giao diện chính.
Trang 73
![Page 74: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/74.jpg)
Trạng thái hệ thống sau khi thực hiện Usecase :
Hiển thị tọa độ tương ứng vị trí đã chọn.
Điểm mở rộng
Không có.
Đặc tả Use-case “Sửa”
Tóm tắt :
Người quản trị xóa 1 vị trí trên bản đồ.
Dòng sự kiện
Dòng sự kiện chính :
Trên giao diện hiển thị tọa độ đã chọn.
Người dùng chọn nút xóa trên giao diện.
Kết thúc Usecase.
Dòng sự kiện khác: không có
Các yêu cầu đặc biệt:
Không có
Trạng thái hệ thống khi bắt đầu thực hiện Usecase:
Người dùng đã chọn được vị trí.
Trạng thái hệ thống sau khi thực hiện Usecase:
Hệ thống xóa tọa độ trên lưới.
Điểm mở rộng :
Không có.
Đặt tả Usecase “TimDuongGPS”Trang 74
![Page 75: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/75.jpg)
Tóm tắt:
Trên giao diện người dùng chọn tìm đường theo GPS.
Dòng sự kiện
Dòng sự kiện chính :
Nếu thiết bị đã kết nối GPS.
Hiển thị tọa độ của người dùng.
Người dùng nhập vào vị trí muốn đi đến.
Hiển thị giao diện tô màu con đường cần đi.
Nếu thiết bị chưa kết nối GPS.
Thông báo cho người dùng cần thiết lập kết nối GPS cho hệ
thống.
Dòng sự kiện khác: Không có.
Các yêu cầu đặc biệt:
Không có.
Trạng thái hệ thống khi bắt đầu thực hiện Usecase:
Trạng thái hệ thống sau khi thực hiện Usecase:
Tô màu con đường cần đi qua
Điểm mở rộng :
Đặt tả Usecase “TimKiemDiaDiem”
Tóm tắt:
Tìm kiếm địa điểm tuyển sinh đã được cài đặt từ trước.
Dòng sự kiện
Trang 75
![Page 76: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/76.jpg)
Dòng sự kiện chính :
Người dùng chọn nút tìm kiếm địa điểm.
Hiển thị các địa điểm đã được cài đặt trước.
Chỉnh chế độ zoom của màn hình.
Dòng sự kiện khác: không có.
Các yêu cầu đặc biệt:
Không có
Trạng thái hệ thống khi bắt đầu thực hiện Usecase :
Hiển thị bản đồ mặc định.
Trạng thái hệ thống sau khi thực hiện Usecase.
Điểm mở rộng:
Không có.
Đặt tả Usecase “TimDuongDi”
Tóm tắt:
Thực hiện tìm kiếm giữa 2 điểm đã được chọn trước đó.
Dòng sự kiện
Dòng sự kiện chính :
Nếu người dùng nhập vào vị trí
Nếu tìm kiếm đúng vị trí thì hiển thị 2 điểm cần tìm, tô màu
con đường được tìm kiếm
Nếu tìm kiếm sai, hiển thị thông báo cho người dùng.
Nếu chưa nhập vị trí
Trang 76
![Page 77: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/77.jpg)
Thông báo cho người dùng cần nhập vào vị trí 2 điểm.
Kết thúc Usecase
Dòng sự kiện khác: không có.
Các yêu cầu đặc biệt: không có
Trạng thái hệ thống khi bắt đầu thực hiện Usecase:
Kiểm tra vị trí của người dùng nhập vào.
Trạng thái hệ thống sau khi thực hiện Usecase
Thông báo:
Nếu tìm kiếm đúng
Hiển thị tô màu con đường cần đi.
Nếu tìm kiếm sai
Yêu cầu người dùng nhập lại.
Điểm mở rộng:
Không có.
Đặt tả Usecase “TimKiemViTri”
Tóm tắt:
Thực hiện tìm kiếm 1 điểm đã được chọn trước đó.
Dòng sự kiện
Dòng sự kiện chính :
Nếu người dùng nhập vào vị trí
Nếu tìm kiếm đúng vị trí thì hiển thị điểm cần tìm.
Nếu tìm kiếm sai, hiển thị thông báo cho người dùng.Trang 77
![Page 78: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/78.jpg)
Nếu chưa nhập vị trí
Thông báo cho người dùng cần nhập vào vị trí 1 điểm.
Kết thúc Usecase
Dòng sự kiện khác: không có.
Các yêu cầu đặc biệt: không có
Trạng thái hệ thống khi bắt đầu thực hiện Usecase:
Kiểm tra vị trí của người dùng nhập vào.
Trạng thái hệ thống sau khi thực hiện Usecase
Thông báo:
Nếu tìm kiếm đúng
Hiển thị tô màu con đường cần đi.
Nếu tìm kiếm sai
Yêu cầu người dùng nhập lại.
Điểm mở rộng:
Không có
Trang 78
![Page 79: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/79.jpg)
Chương 4: THIẾT KẾ CHƯƠNG TRÌNH
4
4.1 THIẾT KẾ DỮ LIỆU
Chương trình sử dụng 1 file XML để lưu thông tin các tọa độ
userInfo.XML.
userInfo.XML
Nút gốc
Nút
nhánh=“maso”
Nút lá
Bảng 4.1Cấu trúc file ngôn ngữ XML.
Ví dụ: một phần nội dung file userInfo.XML.
Trang 79
<?xml version="1.0" encoding="utf-8"?><catalog> <Point id="101"> <Location>10.769820593148937:106.6329574584961</Location> </Point> <Point id="102"> <Location>10.772350148049231:106.63209915161133</Location> </Point> <Point id="103"> <Location>10.692869837478474:106.56909942626953</Location> </Point> <Point id="104"> <Location>10.770916736214163:106.65836334228515</Location> </Point></catalog>
![Page 80: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/80.jpg)
4.2 THIẾT KẾ KIẾN TRÚC
4.2.1 Kiến trúc trên Android
LỚP ĐỐI TƯỢNG DIỄN GIẢI
AddresstoGeoPointChuyển đổi vị trí từ địa điểm sang point, phân
tích chuổi Json.
Android1 Hiển thị thông tin được đánh dấu từ trước.
GPSdemoPhân tích vị trí GPS, hiển thị thông tin vị trí hiện
tại lên bản đồ.
HelloItemizedOverlay Class xữ lý item Overlay.
InfoStreetView Hiển thị khoảng cách đường đi.
MainActivity Hiển thị bản đồ mặc định.
MyXMLHandler Phân tích chuổi XML được sử dụng XPath.
SearchOnePoint Tìm kiếm 1 vị trí trên bản đồ.
SearchTwoPoint Tìm kiếm 2 vị trí trên bản đồ
XMLParsingExample Phân tích chuổi XML lấy từ server.
4.2.2 Kiến trúc trên Bada
LỚP ĐỐI TƯỢNG DIỄN GIẢI
ClassProvider Liên kết webservice sử dụng kết nối webservice.
Form1 Form giao diện chính.
MapSer Nạp chồng phương thức, sử dụng trong bada.
NavigatorInstructForm Form dẫn đường dịch vụ trong bada.
Trang 80
![Page 81: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/81.jpg)
PointMap Chứ 2 vị trí x,y của bản đồ.
ProgressString Tiến trình chạy nền phân tích chuổi XML trả về.
ProgressXML Tiến trình đọc dữ liệu XML từ server.
Util Phân tích từ chuổi sang vị trí trên bản đồ.
4.3 THIẾT KẾ GIAO DIỆN
4.3.1 Giao diện trên android
- Giao diện chính.
Hình 28: Giao diện chính
Mô tả
Stt Tên Kiểu Ý nghĩa Ghi chú
1btnTracking Button Sử dụng hệ thống định vị GPS
vẽ các con đường đi qua
Trang 81
![Page 82: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/82.jpg)
2 btnPosition Button Vị trí hiện tại GPS
3 btnSearch2011 Button Hiển thị vị trí kẹt xe
4 btnStreets Button Tìm đường đi giữa 2 điểm
5btnPoint Button Tìm vị trí của 1 điểm trên bản
đồ
6 mapView Mapview Hiển thị bản đồ
- Giao diện vị trí hiện tại.
Hình 29: Giao diện vị trí hiện tại
- Mô tả :
Stt Tên Kiểu Ý nghĩa Ghi chú
1 mapView Mapview Hiển thị bản đồ
2 Images Image Hiển thị vị trí hiện tại
- Giao diện điểm kẹt xe.Trang 82
![Page 83: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/83.jpg)
Hình 30: Giao diện điểm kẹt xe
Mô tả :
Stt Tên Kiểu Ý nghĩa Ghi chú
1 mapView Mapview Hiển thị bản đồ
2 Images Image Hiển thị vị trí hiện tại
3 btnBack Button Quay lại màn hình chính
4btnInfo Button Hiển thị thông tin các con
đường bị kẹt xe.
- Giao diện tìm kiếm đường giữa 2 điểm.
Trang 83
![Page 84: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/84.jpg)
Hình 31: Giao diện tìm kiếm đường giữa 2 điểm
- Mô tả
Stt Tên Kiểu Ý nghĩa Ghi chú
1 Txta Textview Nhập vào vị trí điểm A
2 Txtb Textview Nhập vào vị trí điểm B
3 btnSearch Button Button tìm kiếm
4 mapView Mapview Hiển thị bản đồ lên giao diện
5 btnBack Button Quay lại giao diện
6btnInfo Button Hiển thị thông tin khoảng cách
đường đi
- Giao diện tìm kiếm 1 vị trí
Trang 84
![Page 85: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/85.jpg)
Hình 32: Giao diện tìm kiếm 1 vị trí
- Mô tả
Stt Tên Kiểu Ý nghĩa Ghi chú
1 Txta Textview Nhập vào vị trí điểm A
2 btnSearch Button Button tìm kiếm
3 mapView Mapview Hiển thị bản đồ lên giao diện
4.3.2 Giao diện trên bada
- Màn hình chính
Trang 85
![Page 86: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/86.jpg)
Hình 33: Màn hình chính
- Mô tả
Stt Tên Kiểu Ý nghĩa Ghi chú
1 Zoom Menu Zoom lớn bản đồ
2 Out Menu Zoom nhỏ bản đồ
- Màn hình chức năng chính.
Trang 86
![Page 87: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/87.jpg)
Hình 34: Màn hình chức năng chính
- Mô tả
Stt Tên Kiểu Ý nghĩa Ghi chú
1Diadiemtuyensinh Menu Hiển thị địa điểm đã được đánh
dấu trước
2Timduong Menu Tìm đường đi giữa 2 điểm cố
định trên bản đồ
3 Danduong Menu Hệ thống dẫn đường trên bản đồ
- Màn hình tìm địa điểm tuyển sinh
Trang 87
![Page 88: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/88.jpg)
Hình 35: Màn hình tìm địa điểm tuyển sinh
- Mô tả
Stt Tên Kiểu Ý nghĩa Ghi chú
1 Zoom Menu Zoom lớn bản đồ
2 Out Menu Zoom nhỏ bản đồ
Trang 88
![Page 89: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/89.jpg)
- Mô tả
Stt Tên Kiểu Ý nghĩa Ghi chú
1 Zoom Menu Zoom lớn bản đồ
2 Out Menu Zoom nhỏ bản đồ
- Màn hình hiển thị vị trí giữa 2 điểm
Trang 89
![Page 90: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/90.jpg)
Hình 36: Màn hình hiển thị vị trí giữa 2 điểm
Stt Tên Kiểu Ý nghĩa Ghi chú
1Next Menu Hiển thị bản đồ đã được định
vị
2 Prev Menu Lùi lại vị trí được chọn
3Khoangcach TextElement Hiển thị thông tin về khoảng
cách giữa 2 điểm
4 Diemcuoi TextElement Hiển thị thông tin về điểm cuối
5 Diemdau TextElement Hiển thị thông tin về điểm cuối
Trang 90
![Page 91: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/91.jpg)
4.4 Tiến trình cài đặt.
4.4.1 Tạo máy ảo Android:
4.4.1.1 Download Android SDK:
Android SDK thực chất là tập hợp các công cụ và thư viện để phát
triển các ứng dụng trên nền tảng hệ điều hành Android.
B1: Vào trang http://developer.android.com/sdk/index.html để tải Android
SDK Starter. Tùy thuộc vào hệ điều hành mà chọn bản Mac, Linux hay
Window. Ở đây ta chọn tải bản cho Window.
Hình 4 1 Download Android SDK
B2: Giải nén file zip vừa tải về. Chạy SDK Setup.exe.
Hình 4 2 Chạy SDK Setup.exe
Trang 91
![Page 92: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/92.jpg)
B3: Đánh dấu các Packages muốn tải: Documents chính là phần Javadoc mô
tả hoạt động của các phương thức và các lớp (phần này chắc chắn không thể
thiếu rồi), Sample là các đoạn code mẫu, SDK Platform ứng với các phiên
bản hệ điều hành (2.2 - API level 8, 2.1 - API level 7,...), và Google API để
phát triển các phần mềm liên quan đến dịch vụ của Google (như Google Map
nếu bạn muốn lập trình liên quan đến GPS).
-> Install Selected
-> Install
-> Cửa sổ Install hiện ra
Hình 4 3 Cài đặt Android SDK
4.4.1.2 Tích hợp Android SDK vào Eclipse:
B1: Tải Eclipse: Eclipse for Java Developers, hoặc Eclipse for Java and
Report Developers.
B2: Khởi chạy Eclipse, vào Help -> Install new softwares. Chọn Add, gõ vào
ô Name tên bạn muốn và Location gõ vào địa chỉ để tải về ADT:
Trang 92
![Page 93: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/93.jpg)
https://dl-ssl.google.com/android/eclipse/
hoặc
http://dl-ssl.google.com/android/eclipse/
Hình 4 4 Tích hợp Android SDL vào Eclipse
B3: Next, next, Accept, next,...Finish (như Install mọi chương trình bình
thường).
B4: Eclipse -> Windows -> Preferences -> Android. Nhấn nút Browse và
chỉnh đường dẫn tới thư mục của Android SDK bạn tải lúc trước.
-> Apply
Trang 93
![Page 94: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/94.jpg)
-> OK
Hình 4 5 Tích hợp Android SDK (tt)
4.4.1.3 Android Virtual Device (Emulator):
AVD là máy ảo cho developer phát triển ứng dụng. Để tạo 1 AVD thì vào
Windows -> Android SDK and AVD Manager -> Virtual Devices chọn
New.-> Cửa sổ Create new AVD hiện ra, điền thông tin cho AVD vào:
Trang 94
![Page 95: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/95.jpg)
Hình 4 6 Tạo máy ảo
Name: Tùy ý (nhưng chỉ được sử dụng các ký tự "a-z", "A-Z", ".-_",
nghĩa là cả khoảng trắng cũng ko đc).
Target: Chọn phiên bản hệ điều hành bạn muốn (thường mình tạo
một Android 1.6 và một Android 2.2 để test).
SD Card: gõ vào Size SD card ảo cho AVD, hoặc chỉnh tới file đã có
sẵn. Nhiều AVD có thể dùng chung 1 Sdcard (chỉ cần tạo lần đầu, các lần
sau chỉnh đường dẫn tới file đó).
Trang 95
![Page 96: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/96.jpg)
Skin: có thể để Default (HVGA) hoặc chọn kích cỡ màn hình bạn
muốn. Chỉ cần quan tâm tới 3 option: HVGA (phân giải 320-480 như G1,
G2, i5700...), QVGA (240-320 như HTC Wildfire...), WVGA854 (480-854
như Milestone, NexusOne...)
-> Create AVD.
Sau khi tạo máy ảo:
Hình 4 7 Giao diện máy ảo
Trang 96
![Page 97: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/97.jpg)
4.4.2 Thiết kế phần mềm:
4.4.2.1 Khởi tạo project:
B1: Vào thẻ File -> New -> Android Project. Nếu bạn mới lập trình
Android lần đầu thì có lẽ dòng Android Project sẽ không hiện ra, khi đó
xuống phía cuối chọn Other rồi vào Android -> Android Project.
B2: Điền thông tin của project:
Min SDK Version: 3 (con số này tương ứng với các phiên bản
android)
=> Kích nút Finish.
Vậy là ta đã tạo xong 1 project với 1 lớp Activity: Location10.
Trang 97
![Page 98: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/98.jpg)
4.4.2.2 Thiết kế class MainActivity
- Cần kế thừa phương thức MapActivity như sau : public class MainActivity extends MapActivity
- T o các đi u khi n trên giao di n trong ph ng th c OnCreate()ạ ề ể ệ ươ ứ
nh sau :ư
super.onCreate(savedInstanceState); setContentView(R.layout.layout_main_11);MapView mv = (MapView)findViewById(R.id.mvmain); mv.setTraffic(true); mv.setBuiltInZoomControls(true);Button btnStreet = (Button) findViewById(R.id.btnSTreet);Button btnPoint = (Button) findViewById(R.id.btnPoint);Button btnTracking = (Button) findViewById(R.id.btnTracking);Button btnPosition=(Button)findViewById(R.id.btnPosition);
- Set s ki n c a các ph ng th c nh sau :ự ệ ủ ươ ứ ư
btnTracking.setOnClickListener(new OnClickListener() {
@Overridepublic void onClick(View arg0) {
// TODO Auto-generated method stubstartActivity(new Intent(MainActivity.this,
LocationV10.class));
}});
btnPoint.setOnClickListener(new OnClickListener() {
@Overridepublic void onClick(View arg0) {
// TODO Auto-generated method stubstartActivity(new Intent(MainActivity.this,
SearchOnePoint.class));
}});
btnStreet.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {
Trang 98
![Page 99: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/99.jpg)
startActivity(new Intent(MainActivity.this, SearchTwoPoint.class));
}});
Button search2011= (Button)findViewById(R.id.btnSearch2011); search2011.setOnClickListener(new OnClickListener() {
@Overridepublic void onClick(View arg0) {
// TODO Auto-generated method stubIntent i = new
Intent(MainActivity.this,Android1.class);startActivity(i);
}});
- Thi t k class SearchOnePoint v n ph i k th a t l pế ế ẫ ả ế ừ ừ ớ
MapActivity:
o Kh i t o hi n th m c đ nh cho map:ở ạ ể ị ặ ị
int lat = (int)(10.314919*1000000);int lng = (int)(107.050781*1000000);GeoPoint pt = new GeoPoint(lat,lng);mapView.getController().setZoom(10);mapView.getController().setCenter(pt);mapView.getController().animateTo(pt);
o Phân tích đ a chu i thành đ a ch trên b n đ ị ổ ị ỉ ả ồ
AddresstoGeoPoint addresstoPoint = new AddresstoGeoPoint();JSONObject json=addresstoPoint.getLocationInfo(locationName);p =addresstoPoint. getGeoPoint(json);
o Thêm 1 đánh d u vào v trí vào b n đ ấ ị ả ồ
MapOverlay mapOverlay = new MapOverlay(); List<Overlay> listOfOverlays = mapView.getOverlays(); listOfOverlays.clear(); listOfOverlays.add(mapOverlay);
Trang 99
![Page 100: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/100.jpg)
o L p MapOverlay vẽ 1 đ i t ng Overlay vào b n đớ ố ượ ả ồ
super.draw(canvas, mapView, shadow);Point screnPts = new Point();mapView.getProjection().toPixels(p, screnPts);Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.bubble);canvas.drawBitmap(bmp, screnPts.x, screnPts.y-34,null);return true;
- Phân tích l p SearchTwoPoint v n extend l p MapActivityớ ẫ ớo Vẽ đ ng d a trên ma tr n đi m nh sau : ườ ự ậ ể ư
GeoPoint startGP = new GeoPoint( (int) (Double.parseDouble(lngLat[1]) *
1E6), (int) (Double .parseDouble(lngLat[0]) * 1E6)); geoPoint = startGP; myMapView.getOverlays().add(new
DirectionPathOverlay(startGP, startGP)); // NAVIGATE THE PATH GeoPoint gp1; GeoPoint gp2 = startGP; for (int i = 1; i < pairs.length; i++) { lngLat = pairs[i].split(","); gp1 = gp2; // watch out! For GeoPoint, first:latitude,
second:longitude gp2 = new GeoPoint((int)
(Double.parseDouble(lngLat[1]) * 1E6), (int) (Double.parseDouble(lngLat[0])
* 1E6)); myMapView.getOverlays().add(new
DirectionPathOverlay(gp1, gp2)); Log.d("xxx", "pair:" + pairs[i]); // END POINT myMapView.getOverlays().add(new
DirectionPathOverlay(gp2, gp2)); calculator=
CalculationByDistance(startGP,gp2);
Trang 100
![Page 101: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/101.jpg)
myMapView.getController().animateTo(startGP);
- Thi t k l p GPSdemoế ế ớo L y thông tin v d ch v GPS nh sau :ấ ề ị ụ ư
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationListener = new GPSLocationListener(); locationManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 0, 0, locationListener);
o Chuy n đ i t Position sang v trí th t ể ổ ừ ị ậ
public String ConvertPointToLocation(GeoPoint point) { String address = ""; Geocoder geoCoder = new Geocoder( getBaseContext(), Locale.getDefault()); try { List<Address> addresses = geoCoder.getFromLocation( point.getLatitudeE6() / 1E6, point.getLongitudeE6() / 1E6, 1);
if (addresses.size() > 0) { for (int index = 0; index <
addresses.get(0).getMaxAddressLineIndex(); index++) address += addresses.get(0).getAddressLine(index) + " "; } } catch (IOException e) { e.printStackTrace(); } return address;
Trang 101
![Page 102: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/102.jpg)
}
- Thi t k L p AddresstoGeoPoint nh sau :ế ế ớ ưo L y d li u m ng chu i JSON khi tr vấ ữ ệ ả ổ ả ề
String[] getDirectionData(String srcPlace, String destPlace) { //AddresstoGeoPoint searchmap = new AddresstoGeoPoint(); JSONObject json1 =getLocationInfo(srcPlace); JSONObject json2=getLocationInfo(destPlace); GeoPoint geo1 =getGeoPoint(json1); GeoPoint geo2 =getGeoPoint(json2); String urlString = "http://maps.google.com/maps?f=d&hl=en&saddr=" + geo1.getLatitudeE6()/1E6+","+geo1.getLongitudeE6()/1E6 + "&daddr=" + geo2.getLatitudeE6()/1E6+","+geo2.getLongitudeE6()/1E6+ "&ie=UTF8&0&om=0&output=kml"; // tv.setText(urlString); Log.d("URL", urlString); Document doc = null; HttpURLConnection urlConnection = null; URL url = null; String pathConent = ""; try {
url = new URL(urlString.toString()); urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setRequestMethod("GET"); urlConnection.setDoOutput(true); urlConnection.setDoInput(true); urlConnection.connect(); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); doc = db.parse(urlConnection.getInputStream());
} catch (Exception e) { }
NodeList nl = doc.getElementsByTagName("LineString"); for (int s = 0; s < nl.getLength(); s++) { Node rootNode = nl.item(s);
Trang 102
![Page 103: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/103.jpg)
NodeList configItems = rootNode.getChildNodes(); for (int x = 0; x < configItems.getLength(); x++) { Node lineStringNode = configItems.item(x); NodeList path = lineStringNode.getChildNodes(); pathConent = path.item(0).getNodeValue(); } } String[] tempContent = pathConent.split(" "); // str= tempContent; return tempContent; // */ return null; }
o Phân tích chu i đ a ch thành đ i t ng JSONổ ị ỉ ố ượ
public JSONObject getLocationInfo(String address) {String compare = address.replace(" ","+");String a
="http://maps.google.com/maps/api/geocode/json?address="+compare+",hochiminh,vn&sensor=false";
HttpGet httpGet = new HttpGet(a);HttpClient client = new DefaultHttpClient();HttpResponse response;StringBuilder stringBuilder = new StringBuilder();
try {response = client.execute(httpGet);HttpEntity entity = response.getEntity();InputStream stream = entity.getContent();int b;while ((b = stream.read()) != -1) {
stringBuilder.append((char) b);}
} catch (ClientProtocolException e) {} catch (IOException e) {}
s JSONObject jsonObject = new JSONObject();try {
jsonObject = new JSONObject(stringBuilder.toString());
} catch (JSONException e) {// TODO Auto-generated catch block
Trang 103
![Page 104: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/104.jpg)
e.printStackTrace();}
return jsonObject;}
Chương 5: TỔNG KẾT
5
5.1 Về Mặt Lý Thuyết
- Tìm hiểu các đặc điểm và điểm mạnh của các ứng dụng chạy trên điện
thoại android, bada.
- Ứng dụng webservice vào điện thoại di động.
- Tìm hiểu căn bản về lập trình Bada, Android.
5.2 Về Mặt Ứng Dụng.
- Hoàn tất một số yêu cầu sau :
o Tìm kiếm các vị trí dựa trên nền webservice sẳn có, truy xuất
và cập nhật thông tin dựa trên websevice.
o Sử dụng kết hợp 2 nền tảng vào ứng dụng.
5.3 Hướng Phát Triển.
- Đi sâu vào tìm hiểu webservice.
- Ứng dụng có khả năng chạy đa nền tảng trên thiết bị di động.
Trang 104
![Page 105: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/105.jpg)
Trang 105
![Page 106: Chương · Web viewAndroid liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn,](https://reader036.vdocuments.mx/reader036/viewer/2022081605/5ae83faf7f8b9a3d3b8fbcf1/html5/thumbnails/106.jpg)
TÀI LIỆU THAM KHẢOTiếng Anh :
1. Ben Morris and Manfred Bortenschlager,Jon Lansdell, Cheng
Luo, Michelle Somerville “Introduction to bada” 2010.
2. Sayed Y. Hashimi and Satya Komatineni “Pro android” – 2009
Website
1. http://www.zonums.com/gmaps/digipoint.php
2. http://www.badaforums.net/forums/bada-development/
3. http://developer.decarta.com/docs/read/bada_api
4. http://www.badadev.com/bada-sample-project-simple-greeting/
5. http://www.androidpeople.com/android-xml-parsing-tutorial-using-
saxparser
6. http://www.androidpeople.com/android-custom-dialog-example
Trang 106