1 điểm cá nhân mình rất thích ở Phonegap, đó chính là tính đơn giản và hầu như không có tính ràng buộc. Phonegap được gọi là framework tuy nhiên nó không giống như 1 vài framework PHP mà mình đã từng học, với những framework PHP này, nó định nghĩa lại hoàn toàn cách bạn viết mã code, và nó đòi hỏi bạn phải hiểu rõ sâu rộng về các thành phần hệ thống bên trong, thì bạn mới có thể lập trình thông thạo được. Với Phonegap, nó không kìm kẹp bạn vào trong 1 hệ thống có 1 quy chuẩn riêng rối rắm nào cả, bạn có thể tự do thoải mái lập trình theo cách mà bạn muốn (tuy nhiên cái gì cũng có 2 mặt của nó), bạn chỉ cần nắm bắt 1 công nghệ duy nhất - công nghệ nền Web(bao gồm HTML5, Javascript, CSS), bỏ qua gánh nặng cần phải nắm bắt và hiểu rõ về các công nghệ bên trong mỗi nền tảng (Android, iOS, Blackberry, Windowphone, …) mà bạn vẫn có thể tạo ra được các ứng dụng “viết một lần, biên dịch qua cloud và chạy khắp nơi – tương thích với hầu hết các nền tảng hệ điều hành di động hiện tại”.
Tài liệu được viết giống như 1 bản ghi chép, ghi lại những thứ mà mình đã đọc được từ các ebook tiếng anh, do vậy bố cục sắp xếp của nó có thể chưa chính xác, cách trình bày không theo chuẩn 1 ebook nào cả và nhiều chỗ viết chưa rõ nghĩa và không mạch lạc do hạn chế về ngoại ngữ của bản thân mình. Tài liệu mang đậm tính chất cá nhân do vậy bạn sẽ bắt gặp trong tài liệu này nhiều đoạn kí tự in đậm, in màu, cỡ chữ lớn bất thường và được tô màu khác nhau - đó là các đoạn có liên quan đến nhau hay là những ghi chú quan trọng mà bạn cần phải đọc kĩ.
Nội dung trong tài liệu này được dựa trên các cuốn ebook: “Beginning Phonegap - Thomas Myer”, “PhoneGap Essentials - John M. Wargo”, “Apache Cordova Documentation 2.2.0 – Phonegap team”, và 1 số giải thích, định nghĩa về kiến trúc của HTML5 từ W3C.org. Tài liệu này không đề cập tới đầy đủ các hàm APIs được Phonegap hỗ trợ. Cụ thể, các phần sau bị lược bỏ: Capture, Compass, Contacts, Globalization, Guides (do mình không có thời gian để viết nốt, và mình cũng không sử dụng đến các phần bị lược bỏ này)
Nếu có thắc mắc hay góp ý gì, các bạn có thể đăng ký ngay 1 nick vào diễn đàn www.phonegap.vn/forum để đặt câu hỏi trực tiếp, các MOD và ADMIN sẽ trả lời câu hỏi của bạn trong thời gian sớm nhất.
1. Phonegap cho người mới học
MỤC LỤC
LỜI NÓI ĐẦU ........................................................................................................................ 5
Các tài liệu liên quan ............................................................................................................. 6
I.Events................................................................................................................................. 7
1.1.Hiểu thêm về events .................................................................................................... 7
1.2.Cách sử dụng EVENTS LISTENER............................................................................. 8
1.3.Hiểu thêm về các dạng sự kiện EVENT TYPES .......................................................... 9
1.3.1.Backbutton ............................................................................................................ 9
1.3.2.Deviceready ........................................................................................................ 10
1.3.3.Menubutton ......................................................................................................... 11
1.3.4.Pause.................................................................................................................. 12
1.3.5.Resume .............................................................................................................. 13
1.3.6.Searchbutton....................................................................................................... 14
1.3.7.Online ................................................................................................................. 15
1.3.8.Offline ................................................................................................................. 16
1.3.9.Một ví dụ đơn giản về sự phản hồi lại các sự kiện events .................................. 17
1.3.10.Một ví dụ đơn giản về việc phản hồi lại các sự kiện Button Events ................... 18
II.Cách làm việc với thiết bị, mạng network, và các thông báo notifications ......................... 20
2.1.Cách lấy thông tin từ thiết bị ...................................................................................... 20
2.1.2.Cách lấy về tên của thiết bị Device Name ........................................................... 20
2.1.3.Cách lấy về thông tin phiên bản phonegap.......................................................... 21
2.1.4.Cách lấy về nền tảng thiết bị Device Platform ..................................................... 21
2.1.5.Cách lấy về ID quốc tế của thiết bị UUID ............................................................ 21
2.1.6.Cách lấy về thông tin phiên bản hệ điều hành ..................................................... 22
2.1.7.Ví dụ về cách lấy thông tin của thiết bị ................................................................ 22
2.2.Cách kiểm tra 1 mạng network .................................................................................. 23
Cách xác định dạng kết nối .......................................................................................... 24
2.3.Cách sử dụng các thông báo NOTIFICATIONS......................................................... 26
2.3.1.Cách sử dụng Alerts ........................................................................................... 26
2.3.2.Cách sử dụng hộp thoại tương tác Confirmation Dialogs .................................... 27
2.3.3.Cách sử dụng Beeps .......................................................................................... 28
2.3.4.Cách sử dụng chế độ rung Vibrations ................................................................. 29
2.3.5.Ví dụ về cách sử dụng tất cả 4 loại thông báo Notifications ................................ 29
III.Gia tốc kế Accelerometer ................................................................................................ 32
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 1
2. Phonegap cho người mới học
3.1.Thế nào là gia tốc kế Accelerometer ? ....................................................................... 32
3.2.Cách sử dụng gia tốc kế Accelerometer .................................................................... 32
3.3.Các ứng dụng dùng gia tốc kế Accelerometer ........................................................... 33
3.4.Cách sử dụng đối tượng gia tốc kế ACCELERATION OBJECT ................................ 36
3.5.Cách sử dụng các phương thức ACCELEROMETER METHODS ............................. 37
3.5.1.Phương thức getCurrentAcceleration.................................................................. 37
3.5.2.Phương thức watchAcceleration ......................................................................... 38
3.5.3.Phương thức clearWatch .................................................................................... 39
3.6.Lựa chọn cấu hình ACCELEROMETER OPTION ..................................................... 40
3.7.Ví dụ về cách sử dụng gia tốc kế ACCELEROMETER .............................................. 40
Cách thức ví dụ hoạt động ........................................................................................... 41
IV.Ví trí địa lý Geolocation ................................................................................................... 42
4.1.Thế nào là vị trí địa lý Geolocation ? .......................................................................... 42
4.2.Cách sử dụng Geolocation ........................................................................................ 42
4.3.Các mẫu ứng dụng về Geolocation ........................................................................... 42
4.4.Các đối tượng POSITION, POSITIONERROR, và COORDINATES .......................... 45
4.4.1.Đối tượng Position Object ................................................................................... 45
4.4.2.Đối tượng PositionError ...................................................................................... 46
4.4.3.Đối tượng Coordinates Object............................................................................. 46
4.5.Ví dụ minh họa về geolocation................................................................................... 46
Cách ví dụ hoạt động ................................................................................................... 47
4.6.Cách cải thiện giao diện và trải nghiệm của người dùng ........................................... 48
V.Media............................................................................................................................... 52
5.1.Các Media Files là gì ? .............................................................................................. 52
5.2.Cách sử dụng các Media Files .................................................................................. 52
5.3.Các ứng dụng mẫu sử dụng media API ..................................................................... 52
5.4.Đối tượng MEDIA OBJECT ....................................................................................... 55
5.5.Cách sừ dụng các phương thức methods ................................................................. 56
5.5.1.phương thức media.getCurrentPosition .............................................................. 56
5.5.2.Phương thức media.getDuration ......................................................................... 57
5.5.3.Phương thức media.pause ................................................................................. 58
5.5.4.Phương thức media.play..................................................................................... 59
5.5.5.Phương thức media.release ............................................................................... 61
5.5.6.Phương thức media.seekTo ............................................................................... 61
5.5.7.Phương thức media.startRecord ......................................................................... 62
5.5.8.Phương thức media.stop .................................................................................... 63
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 2
3. Phonegap cho người mới học
5.5.9.Phương thức media.stopRecord ......................................................................... 64
5.5.10.Kiểm soát lỗi MediaError ................................................................................... 65
5.5.11.Ví dụ về việc sử dụng media api ....................................................................... 66
VI.Lưu trữ Storage .............................................................................................................. 73
6.1.Điểm khác biệt giữa Session Storage và Local Storage ?.......................................... 75
6.2.Cách sử dụng local storage ....................................................................................... 76
6.3.Cách sử dụng đối tượng DATABASE OBJECT ......................................................... 77
6.3.1.Cách tạo và Cách mở 1 database ....................................................................... 77
6.3.2.Cách chạy 1 sql Query ........................................................................................ 78
6.3.3.Cách phân tích và tiền xử lý các câu lệnh SQL (phòng chống SQL injection) ..... 81
6.3.4.Các giao dịch Transactions ................................................................................. 82
6.4.Cách xem 1 tập kết quả ............................................................................................. 84
6.5.Điều chỉnh lỗi ............................................................................................................. 86
6.6.Ví dụ về cách xây dựng 1 database đơn giản : .......................................................... 89
VII.Files ............................................................................................................................... 91
7.1.Hệ thống FILESYSTEMS .......................................................................................... 91
7.2.Tìm hiểu về các thư mục dẫn DIRECTORIES và các files ......................................... 92
7.2.1.Cách sử dụng đối tượng DirectoryEntry Object ................................................... 92
7.2.2.getMetadata ........................................................................................................ 93
7.2.3.setMetadata ........................................................................................................ 94
7.2.4.moveTo ............................................................................................................... 95
7.2.5.copyTo ................................................................................................................ 96
7.2.6.toURI................................................................................................................... 97
7.2.7.remove ................................................................................................................ 97
7.2.8.getParent ............................................................................................................ 98
7.2.9.createReader ...................................................................................................... 98
7.2.10.getDirectory....................................................................................................... 99
7.2.11.getFile ............................................................................................................... 99
7.2.12.removeRecursively.......................................................................................... 100
7.3.metadata ................................................................................................................. 101
7.4.FileError................................................................................................................... 102
7.5.Flags ....................................................................................................................... 102
7.6.LocalFileSystem ...................................................................................................... 103
7.7.DirectoryReader ...................................................................................................... 104
7.8.Cách sử dụng đối tượng FileEntry Object................................................................ 105
7.8.1.getMetadata ...................................................................................................... 106
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 3
4. Phonegap cho người mới học
7.8.2.moveTo ............................................................................................................. 107
7.8.3.copyTo .............................................................................................................. 108
7.8.4.toURI................................................................................................................. 109
7.8.5.remove .............................................................................................................. 109
7.8.6.getParent .......................................................................................................... 109
7.8.7.createWriter ...................................................................................................... 110
7.8.8.file ..................................................................................................................... 111
7.9.Cách đọc các files - FileReader ............................................................................... 111
7.9.1.readAsDataURL ................................................................................................ 112
7.9.2.abort.................................................................................................................. 113
7.9.3.readAsText........................................................................................................ 114
7.10.Cách đọc các files – FileWriter .............................................................................. 116
7.11.Cách truyền dẫn files – FileTransfer ...................................................................... 120
7.11.1.upload ............................................................................................................. 120
7.11.2.download......................................................................................................... 124
7.11.3.abort................................................................................................................ 125
7.11.4.onprogress ...................................................................................................... 125
7.12.FileTransferError ................................................................................................... 126
VIII.Camera ....................................................................................................................... 127
8.1.Cách truy cập 1 ảnh Picture..................................................................................... 127
8.2.Cách thiết lập các cấu hình trong Camera Options .................................................. 139
8.2.1.Quality............................................................................................................... 140
8.2.2.destinationType ................................................................................................. 141
8.2.3.sourceType ....................................................................................................... 143
8.2.4.allowEdit ........................................................................................................... 145
8.2.5.encodingType ................................................................................................... 146
8.2.6.targetHeight và targetWidth ............................................................................... 146
8.2.7.mediaType ........................................................................................................ 146
8.2.8.saveToPhotoAlbum ........................................................................................... 147
8.3.Làm việc với các vấn đề xảy ra với camera ............................................................. 147
IX.Splashscreen ................................................................................................................ 151
10.1.Cách phần quyền Permissions .............................................................................. 151
Android ..................................................................................................................... 151
iOS ............................................................................................................................ 151
10.2.Cách thiết lập......................................................................................................... 151
10.3.show ...................................................................................................................... 152
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 4
5. Phonegap cho người mới học
10.4.hide ....................................................................................................................... 153
LỜI NÓI ĐẦU
1 điểm cá nhân mình rất thích ở Phonegap, đó chính là tính đơn giản và hầu như
không có tính ràng buộc. Phonegap được gọi là framework tuy nhiên nó không giống như 1
vài framework PHP mà mình đã từng học, với những framework PHP này, nó định nghĩa lại
hoàn toàn cách bạn viết mã code, và nó đòi hỏi bạn phải hiểu rõ sâu rộng về các thành
phần hệ thống bên trong, thì bạn mới có thể lập trình thông thạo được. Với Phonegap, nó
không kìm kẹp bạn vào trong 1 hệ thống có 1 quy chuẩn riêng rối rắm nào cả, bạn có thể tự
do thoải mái lập trình theo cách mà bạn muốn (tuy nhiên cái gì cũng có 2 mặt của nó), bạn
chỉ cần nắm bắt 1 công nghệ duy nhất - công nghệ nền Web(bao gồm HTML5, Javascript,
CSS), bỏ qua gánh nặng cần phải nắm bắt và hiểu rõ về các công nghệ bên trong mỗi nền
tảng (Android, iOS, Blackberry, Windowphone, …) mà bạn vẫn có thể tạo ra được các ứng
dụng “viết một lần, biên dịch qua cloud và chạy khắp nơi – tương thích với hầu hết các nền
tảng hệ điều hành di động hiện tại”.
Tài liệu được viết giống như 1 bản ghi chép, ghi lại những thứ mà mình đã đọc được từ các
ebook tiếng anh, do vậy bố cục sắp xếp của nó có thể chưa chính xác, cách trình bày không
theo chuẩn 1 ebook nào cả và nhiều chỗ viết chưa rõ nghĩa và không mạch lạc do hạn chế
về ngoại ngữ của bản thân mình. Tài liệu mang đậm tính chất cá nhân do vậy bạn sẽ bắt
gặp trong tài liệu này nhiều đoạn kí tự in đậm, in màu, cỡ chữ lớn bất thường và được tô
màu khác nhau - đó là các đoạn có liên quan đến nhau hay là những ghi chú quan trọng mà
bạn cần phải đọc kĩ.
Nội dung trong tài liệu này được dựa trên các cuốn ebook: “Beginning Phonegap -
Thomas Myer”, “PhoneGap Essentials - John M. Wargo”,
“Apache Cordova Documentation 2.2.0 – Phonegap team”, và 1 số giải thích, định nghĩa
về kiến trúc của HTML5 từ W3C.org. Tài liệu này không đề cập tới đầy đủ các hàm APIs
được Phonegap hỗ trợ. Cụ thể, các phần sau bị lược bỏ: Capture, Compass, Contacts,
Globalization, Guides (do mình không có thời gian để viết nốt, và mình cũng không sử
dụng đến các phần bị lược bỏ này)
Nếu có thắc mắc hay góp ý gì, các bạn có thể đăng ký ngay 1 nick vào diễn đàn
www.phonegap.vn/forum để đặt câu hỏi trực tiếp, các MOD và ADMIN sẽ trả lời câu hỏi
của bạn trong thời gian sớm nhất.
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 5
6. Phonegap cho người mới học
Các tài liệu liên quan
“Lập trình hướng đối tượng trong Javascript và các kiểu mẫu thiết kế”:
http://www.slideshare.net/myloveforyounqt/lap-trinh-huong-doi-tuong-trong-
javascript-va-cac-kieu-mau-thiet-ke
“Cách tối ưu hóa môi trường lập trình ứng dụng cho Android”:
http://www.slideshare.net/myloveforyounqt/cch-ti-u-ha-mi-trng-lp-trnh-ng-dng-
cho-android-tng-tc-my-o-android
Hoặc đơn giản truy cập vào thư mục chia sẻ sau: http://sdrv.ms/VoAXBi (rất có
thể trong 1 thời gian nữa, mình sẽ viết 1 ebook liên quan đến Jquery Mobile, nếu có
thì các bạn sẽ thấy nó xuất hiện trong thư mục chia sẻ này)
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 6
7. Phonegap cho người mới học
I.Events
1 sự kiện events trong phonegap tương đối giống sự kiện trong javascript.1 hành động (thao
tác) được thực hiện trên thiết bị - ví dụ như document object model (DOM) đã được tải xong
và do đó thiết bị ở trạng thái sẵn sàng “ready” - và hiện tại phonegap có thể thực hiện 1 vài
thứ để trả lời(đáp ứng) lại sự kiện này
1.1.Hiểu thêm về events
Để đơn giản hóa, ta hiểu 1 event là bất cứ hành động nào mà có thể được xác định (nhận
biết) bởi phonegap.trong lập trình javascript truyền thống, bất cứ phần tử nào trên 1 trang
page cũng có thể có các sự kiện event nào đó, và nó có thể được kích hoạt bởi 1 vài mã
javascript.ví dụ như 1 sự kiện onrollover trên 1 link có thể gây ra xuất hiện 1 bảng pop-up,
hay sự kiện onclick có thể gây ra 1 bảng hộp thoại xem trước
Tóm lại, sự kiện events có thể là click chuột, 1 image loading, rolling over trên 1 link nào đó
hay những đối tượng DOM khác, việc lựa chọn 1 trường input field trong 1 form, submitting
1 form, hay sự kiện gõ 1 phím bất kì trên bàn phím.về đa số thì tất cả các dạng sự kiện
events trên cũng có thể được sử dụng khi ta phát triển các ứng dụng sử dụng phonegap.tuy
nhiên có những sự kiện chỉ được định nghĩa bên trong phonegap như sau :
deviceready
pause
resume
online
offline
backbutton
batterycritical
batterylow
batterystatus
menubutton
searchbutton
startcallbutton
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 7
8. Phonegap cho người mới học
endcallbutton
volumedownbutton
volumeupbutton
trong tất cả các sự kiện events trên thì sự kiện deviceready là quan trọng nhất mà ta phải
xem xét tới.không có nó thì ứng dụng của ta sẽ không biết khi nào phonegap đã được load
hoàn toàn.khi nó được kích hoạt, ta có thể gọi 1 cách an toàn bất cứ các hàm PhoneGap
function nào và do đó có thể lần lượt truy cập an toàn vào các API bản địa
khi sự kiện deviceready event được kích hoạt, thì ta biết được 2 điều : DOM đã được load,
và do vậy đã có PhoneGap API
1.2.Cách sử dụng EVENTS LISTENER
để sử dụng bất cứ sự kiện event nào, thì ta sẽ cần phải sử dụng 1 event listener.như ví dụ
sau : dùng để xác định sự kiện deviceready.ta phải làm như sau :
<!DOCTYPE html>
<html>
<head>
<title>PhoneGap Device Ready Example</title>
<script type=”text/javascript” charset=”utf-8” src=”phonegap.js”></script>
<script type=”text/javascript” charset=”utf-8”>
document.addEventListener(“deviceready”, onDeviceReady, false);
function onDeviceReady() {
// call the phonegap api
document.addEventListener(“pause”, onPause, false);
document.addEventListener(“resume”, onResume, false);
}
function onPause(){
}
function onResume(){
}
</script>
</head>
<body>
</body>
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 8
9. Phonegap cho người mới học
</html>
Ví dụ trên nhắc nhở ta rằng deviceready có thể là 1 sự kiện nhưng nó lại không phải là sự
kiện chuẩn tắc trong trình duyệt, nó chỉ hoạt động và nhận biết bởi trong phonegap.nếu ta
thử chạy sự kiện này trong 1 trình duyệt thông thường thì nó không bao giờ được kích hoạt
1.3.Hiểu thêm về các dạng sự kiện EVENT TYPES
1.3.1.Backbutton
Sự kiện backbutton được kích hoạt khi người dùng ấn vào nút Back trên thiết bị Android
Để xác định sự kiện event này, thì ta cần đăng ký 1 event listener như sau :
document.addEventListener(“backbutton”, onBackButton, false);
function onBackButton(){
//handle the back button
}
Cũng giống như các sự kiện event khác thì ta không nên đăng ký giống như thế này cho tới
khi ta đã xác định được sự kiện deviceready event:
<!DOCTYPE html>
<html>
<head>
<title>PhoneGap backbutton Example</title>
<script type=”text/javascript” charset=”utf-8” src=”phonegap.js”></script>
<script type=”text/javascript” charset=”utf-8”>
document.addEventListener(“deviceready”, onDeviceReady, false);
function onDeviceReady() {
// Register the event listener
document.addEventListener(“backbutton”, onBackButton, false);
}
// Handle the back button
//
function onBackButton() {
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 9
10. Phonegap cho người mới học
}
</script>
</head>
<body>
</body>
</html>
1.3.2.Deviceready
Như đã nhắc đến từ trước, sự kiện deviceready là sự kiện quan trọng nhất mà ta có thể
xác định.theo đó ta cần phải xác định sự kiện này đầu tiên trước khi ta làm bất cứ những gì
khác bởi vì khi nó được kích hoạt thì đồng nghĩa với việc ta chắc chắn gọi được các
PhoneGap API
document.addEventListener(“deviceready”, onDeviceReady, false);
function onDeviceReady(){
//ready!
}
Để dành cho những người phát triển trên BlackBerry OS 4.6, thì RIM Browserfield không
hỗ trợ hàm sự kiện event này, nên ta cần sử dụng PhoneGap.available để thay thế như
sau :
function onLoad() {
var intervalID = window.setInterval(
function() {
if (PhoneGap.available) {
window.clearInterval(intervalID);
onDeviceReady();
}
},
500
);
}
function onDeviceReady() {
// use the phonegap api!
}
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 10
11. Phonegap cho người mới học
1.3.3.Menubutton
Sự kiện menubutton được kích hạot khi người dung ấn vào nút Menu trên thiết bị android
Để xác định sự kiện này, thì ta cần đăng ký 1 event listener như sau :
document.addEventListener(“menubutton”, onMenuButton, false);
function onMenuButton(){
//handle the menu button
}
Cũng giống như các events khác, ta không nên đăng ký kiểu như thế này cho tới khi ta xác
định được sự kiện deviceready
<!DOCTYPE html>
<html>
<head>
<title>PhoneGap menubutton Example</title>
<script type=”text/javascript” charset=”utf-8” src=”phonegap.js”></script>
<script type=”text/javascript” charset=”utf-8”>
document.addEventListener(“deviceready”, onDeviceReady, false);
function onDeviceReady() {
// Register the event listener
document.addEventListener(“menubutton”, onMenuButton, false);
}
// Handle the menu button
//
function onMenuButton() {
}
</script>
</head>
<body>
</body>
</html>
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 11
12. Phonegap cho người mới học
1.3.4.Pause
Khi sự kiện pause được kích hoạt là khi 1 ứng dụng được đặt vào chế độ chạy nền
Để xác định sự kiệ này, ta đăng kí 1 event listener như sau :
document.addEventListener(“pause”, onPause, false);
function onPause(){
//handle the pause event
}
Hay ta làm theo như đúng tiêu chuẩn giống như ở trên như sau :
<!DOCTYPE html>
<html>
<head>
<title>PhoneGap pause Example</title>
<script type=”text/javascript” charset=”utf-8” src=”phonegap.js”></script>
<script type=”text/javascript” charset=”utf-8”>
document.addEventListener(“deviceready”, onDeviceReady, false);
function onDeviceReady() {
// Register the event listener
document.addEventListener(“pause”, onPause, false);
}
// Handle the pause
//
function onPause() {
}
</script>
</head>
<body>
</body>
</html>
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 12
13. Phonegap cho người mới học
1.3.5.Resume
Sự kiện resume được kích hoạt khi 1 ứng dụng đang ở trạng thái tạm dừng (chạy nền)
được kích hoạt trở lại làm việc
Để xác định sự kiệ này, ta đăng kí 1 event listener như sau :
document.addEventListener(“resume”, onResume, false);
function onResume(){
//handle the resume event
}
Cũng giống như các events khác, ta không nên đăng ký kiểu như thế này cho tới khi ta xác
định được sự kiện deviceready
<!DOCTYPE html>
<html>
<head>
<title>PhoneGap resume Example</title>
<script type=”text/javascript” charset=”utf-8” src=”phonegap.js”></script>
<script type=”text/javascript” charset=”utf-8”>
document.addEventListener(“deviceready”, onDeviceReady, false);
function onDeviceReady() {
// Register the event listener
document.addEventListener(“resume”, onResume, false);
}
// Handle the resume
//
function onResume() {
}
</script>
</head>
<body>
</body>
</html>
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 13
14. Phonegap cho người mới học
1.3.6.Searchbutton
Sự kiện searchbutton được kích hoạt khi người dùng ấn vào nút Search trên thiết bị android
Để xác định sự kiệ này, ta đăng kí 1 event listener như sau :
document.addEventListener(“searchbutton”, onSearchButton, false);
function onSearchButton(){
//handle the search button
}
Cũng giống như các events khác, ta không nên đăng ký kiểu như thế này cho tới khi ta xác
định được sự kiện deviceready
<!DOCTYPE html>
<html>
<head>
<title>PhoneGap searchbutton Example</title>
<script type=”text/javascript” charset=”utf-8” src=”phonegap.js”></script>
<script type=”text/javascript” charset=”utf-8”>
document.addEventListener(“deviceready”, onDeviceReady, false);
function onDeviceReady() {
// Register the event listener
document.addEventListener(“searchbutton”, onSearchButton, false);
}
// Handle the search button
//
function onSearchButton() {
}
</script>
</head>
<body>
</body>
</html>
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 14
15. Phonegap cho người mới học
1.3.7.Online
Sự kiện online được kích hoạt khi 1 ứng dụng phonegap đang online (điều này có nghĩa là
nó đang được kết nối internet).đây là 1 sự kiện mới được thêm vào trong phiên bản 0.9.6 và
nó chỉ được hỗ trợ trên các thiết bị iOS, Android, and BlackBerry
Để xác định sự kiệ này, ta đăng kí 1 event listener như sau :
document.addEventListener(“online”, isOnline, false);
function isOnline(){
//handle the online event
}
Cũng giống như các events khác, ta không nên đăng ký kiểu như thế này cho tới khi ta xác
định được sự kiện deviceready
<!DOCTYPE html>
<html>
<head>
<title>PhoneGap online Example</title>
<script type=”text/javascript” charset=”utf-8” src=”phonegap.js”></script>
<script type=”text/javascript” charset=”utf-8”>
document.addEventListener(“deviceready”, onDeviceReady, false);
function onDeviceReady() {
// Register the event listener
document.addEventListener(“online”, isOnline, false);
}
// Handle the online event
//
function isOnline() {
}
</script>
</head>
<body>
</body>
</html>
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 15
16. Phonegap cho người mới học
1.3.8.Offline
Sự kiện offline được kích hoạt khi 1 ứng dụng phonegap đang offline (điều này có nghĩa là
nó không kết nối internet).đây là 1 sự kiện mới được thêm vào trong phiên bản 0.9.6 và nó
chỉ được hỗ trợ trên các thiết bị iOS, Android, and BlackBerry
Để xác định sự kiệ này, ta đăng kí 1 event listener như sau :
document.addEventListener(“offline”, isOffline, false);
function isOffline(){
//handle the offline event
}
Cũng giống như các events khác, ta không nên đăng ký kiểu như thế này cho tới khi ta xác
định được sự kiện deviceready
<!DOCTYPE html>
<html>
<head>
<title>PhoneGap offline Example</title>
<script type=”text/javascript” charset=”utf-8” src=”phonegap.js”></script>
<script type=”text/javascript” charset=”utf-8”>
document.addEventListener(“deviceready”, onDeviceReady, false);
function onDeviceReady() {
// Register the event listener
document.addEventListener(“offline”, isOffline, false);
}
// Handle the offline event
//
function isOffline() {
}
</script>
</head>
<body>
</body>
</html>
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 16
17. Phonegap cho người mới học
1.3.9.Một ví dụ đơn giản về sự phản hồi lại các sự kiện events
Ta tạo ra ứng dụng đơn giản, phản hồi lại các sự kiện pause và resume events :
<!DOCTYPE html>
<html>
<head>
<title>PhoneGap Event Example</title>
<script type=”text/javascript” charset=”utf-8” src=”phonegap.js”></script>
<script type=”text/javascript” charset=”utf-8”>
document.addEventListener(“deviceready”, onDeviceReady, false);
function onDeviceReady() {
// Register the event listeners
document.addEventListener(“pause”, onPause, false);
document.addEventListener(“resume”, onResume, false);
}
// Handle the pause
//
function onPause() {
alert(“Paused!”);
}
// Handle the resume
//
function onResume() {
alert(“Resumed!”);
}
</script>
</head>
<body>
</body>
</html>
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 17
18. Phonegap cho người mới học
Chương trình chạy như thế nào
event listener là 1 khóa quan trọng, nó dùng để xác định khi nào sự kiện deviceready
event được kích hoạt và khi sự kiện này được kích hoạt thì ta biết được rằng ta có thể gọi 1
cách an toàn các API còn lại của phonegap
khi nó được kích hoạt, thì sự kiện deviceready event làm chạy hàm onDeviceReady()
function và lần lượt trong hàm này đăng ký 2 event listener mới, 1 cái cho sự kiện pause
event và cái thứ 2 cho sự kiện resume event
1.3.10.Một ví dụ đơn giản về việc phản hồi lại các sự kiện Button
Events
<!DOCTYPE html>
<html>
<head>
<title>PhoneGap Button Example</title>
<script type=”text/javascript” charset=”utf-8” src=”phonegap.js”></script>
<script type=”text/javascript” charset=”utf-8”>
document.addEventListener(“deviceready”, onDeviceReady, false);
function onDeviceReady() {
// Register the event listeners
document.addEventListener(“searchbutton”, onSearch, false);
document.addEventListener(“menubutton”, onMenuButton, false);
document.addEventListener(“backbutton”, onBackButton, false);
}
// Handle the backbutton
//
function onBackButton() {
alert(“You hit the back button!”);
}
// Handle the menubutton
//
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 18
19. Phonegap cho người mới học
function onMenuButton() {
alert(“You hit the menu button!”);
}
// Handle the searchbutton
//
function onSearchButton() {
alert(“You hit the search button!”);
}
</script>
</head>
<body>
</body>
</html>
Chương trình chạy như thế nào
Chương trình đơn giản là đầu tiên tiến hành kiểm tra để chắc chắn rằng ứng dụng
phonegap đã sẵn sàng hay chưa, và sau đó đăng ký 3 event listeners, từng cái 1 dành cho
các nút của thiết bị như Search, Menu, và Back buttons
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 19
20. Phonegap cho người mới học
II.Cách làm việc với thiết bị, mạng network, và các thông
báo notifications
2.1.Cách lấy thông tin từ thiết bị
Phonegap có 1 runtime object được gọi là đối tượng thiết bị device, để lưu giữ thông tin có
ích về thiết bị.sau đây là những thuộc tính của đối tượng device :
device.name – là tên của thiết bị (ví dụ như my iphone)
device.phonegap – phiên bản của phonegap
device.platform – loại của thiết bị (ví dụ như iphone)
device.uuid – số id của thiết bị
device.Version – phiên bản hệ điều hành OS đang chạy
quan trọng phải chú ý rằng : device được gán thành đối tượng window object, do vậy nó
hoàn toàn có phạm vi toàn cục.hiểu theo cách khác, cả 2 biến sau đều tham chiếu tới cùng
thiết bị device :
//both of these reference the same device
var myPhoneName = window.device.name;
var myPhoneName = device.name;
trong phần này ta sẽ học lấy về các thông tin sau :
tên của thiết bị device
phiên bản phonegap
ID quốc tế dùng để xác định thiết bị duy nhất (UUID)
Phiên bản hệ điều hành của thiết bị
2.1.2.Cách lấy về tên của thiết bị Device Name
Để lấy về tên của thiết bị ta sử dụng device.name như sau:
var myPhoneName = device.name;
giá trị này được trả về được thiết lập bởi nhà sản xuất và có thể biến đổi từ sản phẩm này
đến sản phẩm khác và biến đổi ngay cả trên cùng 1 phiên bản sản phẩm.ví dụ, đây là 1
danh sách của các giá trị trả về cho các loại điện thoại khác nhau :
Android Nexus One trả về là Passion ( đây là tên mã sản phẩm)
Android Motorola Droid trả về là voles
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 20
21. Phonegap cho người mới học
BlackBerry Bold 8900 trả về là 8900
iPhone trả về là tên được thiết lập trong iTunes( ví dụ như Tom‟s phone )
thuộc tính device.name được hỗ trợ trong các thiết bị Android, BlackBerry, và iPhone
2.1.3.Cách lấy về thông tin phiên bản phonegap
để lấy về thông tin phiên bản phonegap trên thiết bị, ta sử dụng thuộc tính
device.phonegap như sau :
var myDevicePhoneGap = device.phonegap;
thuộc tính device.phonegap được hỗ trợ trên các thiết bị Android, Blackberry, và iPhone
2.1.4.Cách lấy về nền tảng thiết bị Device Platform
cách lấy về tên của hệ điều hành trên thiết bị, ta sử dụng device.platform như sau:
var myDevicePlatform = device.platform;
phụ thuộc vào thiết bị device, câu lệnh này trả về các thứ sau :
android
blackberry
iphone
webOS
Chú ý: theo kinh nghiệm của lập trình viên thì các thiết bị iphone trả về là ios và 1
vài thiết bị blackberry trả về phiên bản hệ điều hành để thay thế cho tên của hệ điều hành.ví
dụ nó có thể trả về 1.10.3.5 thay cho blackberry
2.1.5.Cách lấy về ID quốc tế của thiết bị UUID
mọi thiết bị điều phải có số UUID, số này được thêm vào thiết bị bởi nhà sản xuất. UUID có
thể có những chiều dài khác nhau phụ thuộc vào thiết bị, nó có thể luôn luôn được định
nghĩa như là 1 mẫu model và nền tảng platform.ví dụ, android sử dụng 1 số kiểu int ngẫu
nhiên 64-bit; blackberry sử dụng mã PIN 9 kí tự; và iphone sử dụng 1 chuỗi string là giá trị
của hàm băm hash
cách lấy UUID của thiết bị, ta sử dụng device.uuid như sau :
var myDeviceID = device.uuid;
thuộc tính device.uuid được hỗ trợ trên các thiết bị Android, BlackBerry, và iPhone
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 21
22. Phonegap cho người mới học
2.1.6.Cách lấy về thông tin phiên bản hệ điều hành
cách lấy về tên phiên bản hệ điều hành của thiết bị, ta sử dụng device.version như sau :
var myDeviceOS = device.version;
phụ thuộc vào hệ điều hành, ta sẽ lấy được về các giá trị khác nhau.ví dụ trên android, hệ
điều hành Froyo OS trả về là 2.2 và Éclair OS trả về là 2.1, 2.0.1 hay 2.0. BlackBerry Bold
9000 sử dụng OS 4.6 thì trả về là 4.6.0.282 và 1 iphone chạy IOS 3.2 trả về là 3.2
thuộc tính device.version được hỗ trợ trên các thiết bị Android (2.1 and higher), BlackBerry,
and iPhone
2.1.7.Ví dụ về cách lấy thông tin của thiết bị
ta tạo ra 1 đoạn mã đơn giản dùng để cho phép ta sử dụng các phần tử device để lấy về
các thông tin về thiết bị :
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01//EN”
“http://www.w3.org/TR/html4/strict.dtd”>
<html>
<head>
<title>My Device</title>
<script type=”text/javascript” charset=”utf-8” src=”phonegap.js”></script>
<script type=”text/javascript” charset=”utf-8”>
// Use an event listener to detect if PhoneGap is ready
//
function onLoad() {
document.addEventListener(“deviceready”, onDeviceReady, false);
}
// okay, PhoneGap is ready
//
function onDeviceReady() {
var myDiv = document.getElementById(„props‟);
myDiv.innerHTML = „Device Name: „ + device.name + „<br />‟ +
„Device PhoneGap: „ + device.phonegap + „<br />‟ +
„Device Platform: „ + device.platform + „<br />‟ +
„Device UUID: „ + device.uuid + „<br />‟ +
„Device Version: „ + device.version + „<br />‟;
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 22
23. Phonegap cho người mới học
}
</script>
</head>
<body onload=”onLoad()”>
<p id=”props”>Loading device properties...</p>
</body>
</html>
Cách thức chương trình hoạt động
Trong ví dụ này, ta tạo ra 1 tài liệu HTM đơn giản, đầu tiên tải về thư viện phonegap.js.tiếp
theo ta viết 1 hàm onLoad() function dùng để đăng ký 1 event handler bằng cách sử dụng
addEventListener.đặc biệt, ta muốn tuân theo sự kiện deviceready event, và khi nó được
kích hoạt thì nó sẽ chạy hàm onDeviceReady() function.
Hàm onDeviceReady() function làm 2 thứ : thứ nhất là nó điền vào 1 đoạn văn vào trong
document DOM có id là “props” bằng cách sử dụng getElementById, sau đó nó in ra
thông tin về thiết bị vào trong phần tử DOM đó
Nếu ta sử dụng JQuery, thì ta có thể đơn giản viết như sau :
function onDeviceReady() {
$(“#props”).html(„Device Name: „ + device.name + „<br />‟ +
„Device PhoneGap: „ + device.phonegap + „<br />‟ +
„Device Platform: „ + device.platform + „<br />‟ +
„Device UUID: „ + device.uuid + „<br />‟ +
„Device Version: „ + device.version + „<br />‟);
}
2.2.Cách kiểm tra 1 mạng network
Với 1 người lập trình nền web hay destop, thì ta thường giả định rằng kết nối mạng network
luôn luôn được bật thông qua kết nối có dây hoặc không dây.tuy nhiên khi ta bắt đầu làm
việc với các thiết bị di động, ta không thể luôn luôn giả định như vậy.tín hiệu kết nối có thể
không tồn tại hoặc có thể rất yếu không ổn định, hay người dùng có thể chuyển đổi từ
cellular sang wifi hay ngược lại
May mắn cho ta là phonegap API có chứa 1 đối tượng là Connection object, đối tượng này
cho phép ta truy cập vào thông tin kết nối cellular và WiFi của thiết bị
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 23
24. Phonegap cho người mới học
Cách xác định dạng kết nối
Để xác định dạng của kết nối mạng network thì ta sẽ phải sử dụng connection.type như
sau :
function checkConnection(){
var myState = navigator.network.connection.type;
//return a specific state
}
Hàm connection.type sẽ trả về 1 trong số danh sách các dạng kết nối có thể sau :
UNKNOWN
ETHERNET
WIFI
CELL_2G
CELL_3G
CELL_4G
NONE
1 ý tưởng tốt để làm việc với các bảng thông điệp để thông báo tới người dùng.ta sẽ làm
như sau :
function checkConnection() {
var networkState = navigator.network.connection.type;
var states = {};
states[Connection.UNKNOWN] = „Unknown connection‟;
states[Connection.ETHERNET] = „Ethernet connection‟;
states[Connection.WIFI] = „WiFi connection‟;
states[Connection.CELL_2G] = „Cell 2G connection‟;
states[Connection.CELL_3G] = „Cell 3G connection‟;
states[Connection.CELL_4G] = „Cell 4G connection‟;
states[Connection.NONE] = „No network connection‟;
alert(„Connection type: „ + states[networkState]);
}
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 24
25. Phonegap cho người mới học
ở ví dụ trên, nếu dạng kết nối là NONE thì thông báo sẽ chứa thông điệp là „No network
connection‟
ví dụ về cách kiểm tra mạng network khả dụng
<!DOCTYPE html>
<html>
<head>
<title>Connectivity Example</title>
<script type=”text/javascript” charset=”utf-8” src=”phonegap.js”></script>
<script type=”text/javascript” charset=”utf-8”>
document.addEventListener(“deviceready”, onDeviceReady, false);
function onDeviceReady() {
checkConnection();
}
function checkConnection() {
var networkState = navigator.network.connection.type;
var states = {};
states[Connection.UNKNOWN] = „Unknown connection‟;
states[Connection.ETHERNET] = „Ethernet connection‟;
states[Connection.WIFI] = „WiFi connection‟;
states[Connection.CELL_2G] = „Cell 2G connection‟;
states[Connection.CELL_3G] = „Cell 3G connection‟;
states[Connection.CELL_4G] = „Cell 4G connection‟;
states[Connection.NONE] = „No network connection‟;
alert(„Connection type: „ + states[networkState]);
}
</script>
</head>
<body>
<p>A dialog box will report the network state.</p>
</body>
</html>
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 25
26. Phonegap cho người mới học
Cách thức ví dụ hoạt động
Đầu tiên ta load thư viện phonegap và sau đó đăng ký 1 event handler là sự kiện
deviceready
Khi thiết bị đã ở trạng thái sẵn sàng thì ta chạy navigator.network.isReachable trên
google.com.website này luôn luôn sống và nó là công cụ tốt để kiểm tra kết nối mạng
network (hay theo cách khác, ta có thể không muốn kiểm tra trên 1 server vì nó có thể chết
bất cứ lúc nào khi vào lúc ta tiến hành kiểm tra)
Tiếp theo, ta thiết lập 1 đối tượng đơn giản có chứa thông báo trạng thái network status từ
phonegap giống như các chỉ mục keys, với các thông điệp ta tùy chỉnh giống như các giá trị
values – đây là cách ta tránh khỏi bất cứ thông điệp khó hiểu nào được gửi tới người sử
dụng thiết bị
Tiếp theo, ta chạy 1 hàm JavaScript alert() chứa thông điệp về kết nối.nó sẽ được pop-up
trên thiết bị và người dùng có thể tắt nó
Cuối cùng, để chắc chắn ta tiến hành chạy hàm onLoad() tử thẻ <body>
2.3.Cách sử dụng các thông báo NOTIFICATIONS
Trong những ví dụ mà ta đã làm từ trước, ta đã sử dụng 1 hàm tiêu chuẩn của javascript là
alert() để hiện thị thông tin tới người sử dụng( đặc biệt nhất là thông tin về trạng thái của kết
nối mạng network).mặc dù ta có thể sử dụng loại hệ thống thông báo này trên thiết bị, tuy
nhiên phonegap mang tới tận 4 loại thông báo notifications khác nhau mà ta có thể tận
dụng :
Alerts
Confirmation dialogs
Beeps
Vibrations
2.3.1.Cách sử dụng Alerts
Để hiện thị ra 1 thông báo alert tùy chỉnh hay 1 hộp tương tác dialog box, ta sử dụng hàm
notification.alert như sau :
navigator.notification.alert(message,callback,[title],[button]);
hàm này cần bắt buộc phải có 2 tham số truyền vào và 2 tham số tùy chọn :
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 26
27. Phonegap cho người mới học
Message – 1 chuỗi string chứa thông điệp (ví dụ như “The network status is WIFI
only”
Callback – là hàm function gọi lại được gọi khi thông báo alert bị bỏ qua
Title – 1 chuỗi string chứa tên tiêu đề của hộp alert (tùy chọn)
Button – 1 chuỗi string chứa tên của nút button (ví dụ như OK) (tùy chọn)
Hàm notification.alert có hỗ trợ trên các thiết bị Android, BlackBerry OS 4.6,
webOS,iphone
Đây là 1 ví dụ hơi phức tạp bao gồm chứa tham số callback :
function gameOverDismissed() {
// calculate or store their final score...
}
navigator.notification.alert(
[AU: Be sure you replace all tabs in your code with five spaces.]
„Game Over!‟, // message
gameOverDismissed, // callback
„Game Over‟, // title
„Done‟ // buttonName
);
Nếu ta đang làm việc trên blackberry hay webOS thì chú ý rằng ta sẽ chỉ có thể gửi đi 1
thông điệp (không tùy chỉnh được tiêu đề titles, tên của nút button, hay khả năng sử dụng
hàm callback) như sau :
//BlackBerry 4.6 / webOS
navigator.notification.alert(„Game Over! „);
2.3.2.Cách sử dụng hộp thoại tương tác Confirmation Dialogs
1 hộp thoại confirmation dialog cũng giống với 1 alert, ngoại trừ rằng nó chứa nhiều nút
buttons.ví dụ như 1 hộp thoại confirmation dialog đưa ra câu hỏi “Do you wish to continue?”
Thì có 2 button là Yes và No
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 27
28. Phonegap cho người mới học
Để tạo ra 1 hộp thoại confirmation dialog, ta sử dụng hàm notification.confirm.ta sẽ cần
đóng gói nó trong 1 hàm function, bởi vì nó thường được gọi từ 1 link hay 1 button trên giao
diện HTML như sau :
// process the confirmation dialog result
function onConfirm(button) {
alert(„You selected button „ + button);
}
// Show a custom confirmation dialog
//
function showConfirm() {
navigator.notification.confirm(
„Game Over!‟, // message
onConfirm, // callback to invoke with index of button pressed
„Game Over‟, // title
„Restart,Exit‟ // buttonLabels
);
}
2.3.3.Cách sử dụng Beeps
Thỉnh thoảng ta không cần tới 1 hiện thị thông báo – mà đơn giản chỉ cần 1 tiếng beep để ra
hiệu thông báo khi người dùng làm gì đó.để tạo ra tiếng beep, ta sử dụng hàm
notification.beep như sau :
navigator.notification.beep(2);
hàm này cần 1 tham số truyền vào, nó là 1 kiểu int dùng để xác định số tiếng beep mà ta
muốn phát
hàm này được hỗ trợ trong các thiết bị Android, BlackBerry, webOS, và iPhone
Chú ý: android sẽ chơi bản nhạc thông báo Notification mặc định được thiết lập ở
Settings ➪Sound and Display panel.còn iphone cũng sẽ từ chối tham số tiếng beep truyền
vào
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 28
29. Phonegap cho người mới học
2.3.4.Cách sử dụng chế độ rung Vibrations
thỉnh thoảng không phải lúc nào cũng thích hợp để thiết bị phát ra tiếng, do đó phonegap
cung cấp 1 hàm sử dụng chế độ rung là notification.vibrate, hàm này cần 1 tham số để
truyền vào là thời gian tính bằng mili giây như sau :
navigator.notification.vibrate(2000);
hàm này được hỗ trợ trong các thiết bị Android, BlackBerry, webOS, và iPhone
Chú ý: iphone sẽ từ chối tham số truyền vào và nó sẽ rung theo thời gian được thiết
lập sẵn
2.3.5.Ví dụ về cách sử dụng tất cả 4 loại thông báo Notifications
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01//EN”
“http://www.w3.org/TR/html4/strict.dtd”>
<html>
<head>
<title>Notifications</title>
<script type=”text/javascript” charset=”utf-8” src=”phonegap.js”></script>
<script type=”text/javascript” charset=”utf-8”>
// Wait for PhoneGap to load
//
function onLoad() {
document.addEventListener(“deviceready”, onDeviceReady, false);
}
// PhoneGap is ready
//
function onDeviceReady() {
// Empty
}
// Show a custom alert
//
function showAlert() {
navigator.notification.alert(
„Game Over!‟, // message
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 29
30. Phonegap cho người mới học
alertCallback, //callback
„Game Over‟, // title
Available for
download on
Wrox.com
Available for
download on
Wrox.com
Using Notifications ❘ 69
„Done‟ // buttonName
);
}
//alert call back
function alertCallback(){
//do something... like calculate final score
}
// process the confirmation dialog result
function onConfirm(button) {
alert(„You selected button „ + button);
}
// Show a custom confirmation dialog
//
function showConfirm() {
navigator.notification.confirm(
„Game Over!‟, // message
onConfirm, // callback to invoke with index of button pressed
„Game Over‟, // title
„Restart,Exit‟ // buttonLabels
);
}
// Beep twice
//
function playBeep() {
navigator.notification.beep(2);
}
// Vibrate for 4 seconds
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 30
31. Phonegap cho người mới học
//
function vibrate() {
navigator.notification.vibrate(4000);
}
</script>
</head>
<body onload=”onLoad()”>
<p><a href=”#” onclick=”showAlert(); return false;”>Show Alert</a></p>
<p><a href=”#” onclick=”showConfirm(); return false;”>Show Confirmation</a></p>
<p><a href=”#” onclick=”playBeep(); return false;”>Play Beep</a></p>
<p><a href=”#” onclick=”vibrate(); return false;”>Vibrate</a></p>
</body>
</html>
Cách thức ví dụ hoạt động
ở ví dụ này, trong hàm onDeviceReady(), ta để nó trống rỗng bởi vì tài liệu document chính
đã chứa 1 dãy các link dùng để gọi các hàm function và lần lượt chúng sẽ kích hoạt các
thông báo khác nhau
ví dụ, bằng cách ấn vào link đầu tiên hàm showAlert() sẽ được kích hoạt và nó sẽ hiện thị 1
thông báo alert tùy chỉnh.link thứ 2 sẽ kích hoạt hàm showConfirm() hiện thị ra 1 hộp thoại
confirmation box
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 31
32. Phonegap cho người mới học
III.Gia tốc kế Accelerometer
3.1.Thế nào là gia tốc kế Accelerometer ?
gia tốc kế Accelerometer là 1 thiết bị dùng để ghi lại chuyển động trong không gian 3 chiều
XYZ
để hình dung được 3 chiều XYZ, thì ta đặt thiết bị lên trên 1 bề mặt phẳng giống như trên
mặt bàn.ta giả sử rằng bề mặt này có rất ít ma sát và ví dụ như ta có thể đặt thiết bị sang
trái và sang phải mà không cần phải nâng nó lên.mục đích của ví dụ này là giúp ta hình
dung được nơi ta đặt thiết bị tại vị trí (0,0,0) trong không gian tọa độ.bất cứ cách nào mà ta
dùng để di chuyển thiết bị thì sẽ dẫn đến 1 sự thay đổi trong hệ tọa độ
nếu thiết bị là mỏng nằm trên mặt bàn và khi ta di chuyển nó sang trái hay sang phải thì
chính là ta di chuyển nó dọc theo trục X.ta di chuyển nó sang trái là ta cho nó 1 kết quả âm,
và ta di chuyển nó sang phải thì ta cho nó kết quả dương.nếu ta di chuyển thiết bị ra xa bàn
hay tới gần chỗ ta thì chính là ta đang di chuyên nó trên trục Y.nếu di chuyển nó ra xa thì ta
được kết quả dương theo trục Y, và nếu di chuyển nó lại gần thì ta được kết quả âm
trục Z được miêu tả là chiều lên xuống và được thêm vào làm chiều thứ 3 của hệ trục tọa
độ.nếu ta cầm lấy thiết bị và cầm nó tiến đến mặt thì ta được kết quả dương theo trục Z.nếu
ta cho thiết bị xuống dưới mặt bàn thì ta được kết quả âm theo trục Z
tất nhiên rất là khó khăn khi ta dịch chuyển 1 thiết bị theo chỉ 1 trục mà không gây ảnh
hưởng tới các trục khác.nếu ta cầm thiết bị lên ( ví như di chuyển nó tới gần mặt) thì ta nhận
được kết quả dương đối với trục Z, nhưng cũng giống như vậy khi ta mang nó gần cơ thể
hơn thì thu được kết quả âm theo trục Y……
giờ hình dung xem, chuyện gì sẽ xảy ra nếu ta tung thiết bị quay trở lại bề mặt bàn - nhớ
đùng tung quá mạnh ta có thể làm vỡ nó.khi đó gia tốc kế accelerometer bên trong thiết bị
sẽ xác định tất cả chuyển động dọc theo trục XYZ
3.2.Cách sử dụng gia tốc kế Accelerometer
nhớ rằng gia tốc kế có thể xác định được chuyển động, độ nghiêng, và gia tốc do đó nó
dùng để tạo ra các ứng dụng sáng tạo
Làm thế nòa để tạo ra 1 ứng dụng dùng để xác định chuyển động của người và giữ
các vết của chúng trong lúc người sử dụng đang thực hiện? tất cả những gì người
dùng phải làm là bật ứng dụng lên và đặt thiết bị vào trong túi
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 32
33. Phonegap cho người mới học
Dành cho các vị trí có ánh sáng thấp, thì ta có thể tự động chụp 1 bức ảnh với
camera của thiết bị nếu thiết bị vẫn hoạt động tốt
Ta có thể xây dựng 1 game mà trong đó ta điều khiển các bộ phận có tương tác với
độ nghiêng hay chuyển động của thiết bị
3.3.Các ứng dụng dùng gia tốc kế Accelerometer
nếu ta có 1 chiếc iphone, và ta hầu như chắc chắn biết đến hay đã từng chơi “DoodleJump”
như trong hình dưới. “DoodleJump” là 1 game dễ gây nghiện nó cho phép nhân vật của ta
nhảy từ mức này tới mức khác bằng cách sử dụng gia tốc kế để xác định chuyển động sang
trái/phải
1 game khá phổ biến khác là “Super Monkey Ball” như trong hình 6-2. Ý tưởng nằm đằng
sau game này là hướng dẫn 1 chú khỉ nhỏ dễ thương vượt qua các chướng ngại vật khác
nhau bằng cách nghiêng hay lắc iphone
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 33
34. Phonegap cho người mới học
Trên thiết bị android, ta cũng có “Hyperspace” như trong hình 6-3, trong đó ta sử dụng
nghiêng hay chuyển động để điều khiển 1 trái bóng để đi xuyên qua các chướng ngại vật.
tất nhiên, có vô số các ứng dụng sử dụng gia tốc kế accelerometer
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 34
35. Phonegap cho người mới học
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 35
36. Phonegap cho người mới học
3.4.Cách sử dụng đối tượng gia tốc kế ACCELERATION
OBJECT
đối tượng gia tốc kế ACCELERATION OBJECT là 1 đối tượng chỉ có thể đọc và nó chứa dữ
liệu gia tốc kế được chụp lại tại 1 điểm xác định trong 1 thời điểm.và đối tượng này có các
thuộc tính :
X - đại lương chuyển động trên trục X, được trình bày là 1 số
Y - đại lương chuyển động trên trục Y, được trình bày là 1 số
Z - đại lương chuyển động trên trục Z, được trình bày là 1 số
Timestamp – mốc thời gian lúc tạo ra, được trình bày trong mili giây
Đối tượng này được tạo ra và được cư trú trong phongegap và nó trả về 1 phương thức
accelerometer method như ví dụ sau :
navigator.accelerometer.getCurrentAcceleration(onSuccess, onError);
//you now have access to an acceleration object
//which contains x, y, z, and timestamp data
function onSuccess(acceleration) {
alert(„Acceleration X: „ + acceleration.x + „n‟ +
„Acceleration Y: „ + acceleration.y + „n‟ +
„Acceleration Z: „ + acceleration.z + „n‟ +
„Timestamp: „ + acceleration.timestamp + „n‟);
};
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 36
37. Phonegap cho người mới học
function onError() {
alert(„Sorry! Error!‟);
};
3.5.Cách sử dụng các phương thức ACCELEROMETER
METHODS
3.5.1.Phương thức getCurrentAcceleration
Để lấy về gia tốc kế hiện tại theo trục XYZ thì ta phải sử dụng phương thức
accelerometer.getCurrentAcceleration như sau :
navigator.accelerometer.getCurrentAcceleration(accelerometerSuccess,
accelerometerError);
dữ liệu acceleration data được trả về thông qua hàm accelerometerSuccess callback :
function onSuccess(acceleration) {
alert(„Acceleration X: „ + acceleration.x + „n‟ +
„Acceleration Y: „ + acceleration.y + „n‟ +
„Acceleration Z: „ + acceleration.z + „n‟ +
„Timestamp: „ + acceleration.timestamp + „n‟)
};
function onError() {
alert(„ooooops!‟);
};
navigator.accelerometer.getCurrentAcceleration(onSuccess, onError);
Chú ý: trên các thiết bị IOS, thì việc gọi phương thức getCurrentAcceleration() sẽ
không làm việc như cách mà ta nghĩ,dùng để thay thế cho current acceleration thì nó sẽ báo
cáo về giá trị cuối cùng được báo cáo từ lời gọi PhoneGap accelerometer.để thay thế, ta sẽ
cần sử dụng phương thức watchAcceleration()
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 37
38. Phonegap cho người mới học
3.5.2.Phương thức watchAcceleration
Phương thức watchAcceleration cho phép ta lấy về dữ liệu gia tốc kế ở 1 khoảng thời gian
chính xác.nếu ta thiết lập 1 biến chứa lời gọi phương thức và chuyển tiếp vào trong 1 tham
số tần suất như là 1 trong những lựa chọn, thì ta sẽ lấy về dữ liệu gia tốc kế dựa trên 1 chu
kì chuẩn như sau :
function onSuccess(acceleration) {
alert(„Acceleration X: „ + acceleration.x + „n‟ +
„Acceleration Y: „ + acceleration.y + „n‟ +
„Acceleration Z: „ + acceleration.z + „n‟ +
„Timestamp: „ + acceleration.timestamp + „n‟);
};
function onError() {
alert(„onError!‟);
};
var options = { frequency: 1000 }; // Update every second
var watchID = navigator.accelerometer.watchAcceleration(onSuccess, onError,
options);
đoạn code ở trên sẽ tạo ra 1 thông báo alert theo chu kì từng giây một.1 hàm hữu dụng có
thể là 1 vài thứ giống như ở dưới mà trong đó các phần tử DOM luôn được làm mới bên
trong HTML, và do vậy nó cho ta biết sự in dữ liệu ra màn hình hữu dụng như sau :
function onSuccess(acceleration) {
var myX = document.getElementById(„my_x‟);
var myY = document.getElementById(„my_y‟);
var myZ = document.getElementById(„my_z‟);
var myT = document.getElementById(„my_timestamp‟);
myX.innerHTML(acceleration.x);
myY.innerHTML(acceleration.y);
myZ.innerHTML(acceleration.z);
myT.innerHTML(acceleration.timestamp);
}
function onError() {
alert(„oooops!‟);
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 38
39. Phonegap cho người mới học
};
var options = { frequency: 1000 }; // Update every second
var watchID = navigator.accelerometer.watchAcceleration(onSuccess,
onError,
options);
để đoạn code trên hoạt đọng, ta phải chắc chắn là tạo ra các phần tử DOM tương ứng thích
hợp như sau :
<div id=‟my_x‟></div>
<div id=‟my_y‟></div>
<div id=‟my_z‟></div>
<div id=‟my_timestamp‟></div>
Chú ý: trong iOS thì gia tốc kế được quan tâm đặc biệt, do vậy phonegap sẽ bị giới
hạn mức chu kỳ nhỏ nhất là 40 mili giây và lớn nhất là 1000 mili giây.do vậy nếu ta yêu cầu
1 cập nhật có chu kỳ là 3000 mili giây(hay là 3 giây) thì phonegap sẽ yêu cầu 1 chu kỳ là
1000 mili giây trên thiết bị nhưng sẽ gọi hàm callback thành công lại dựa vào yêu cầu là chu
kỳ 3000 mili giây
3.5.3.Phương thức clearWatch
Để ngừng việc xem các dữ liệu gia tốc kế được tạo bởi phương thức watchAcceleration(),
thì ta phải sử dụng phương thức clearWatch() và tham chiếu tới biến mà ta vừa tạo ra từ
trước như sau :
navigator.accelerometer.clearWatch( watchID);
thông thường, ta sẽ kích hoạt sự kiện này thông qua 1 nút click như sau :
<button onclick=”stopWatch();”>Stop Watching</button>
Tất nhiên, ta cũng có thể gán sự kiện này tới 1 vài loại chu kỳ như sau : thu thập dữ liệu
trong 30 giây rồi ngừng lại
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 39
40. Phonegap cho người mới học
3.6.Lựa chọn cấu hình ACCELEROMETER OPTION
Để thiết lập tần số là 5 giây, ta làm như sau :
var options = { frequency: 5000 }; // Update every 5 seconds
var watchID = navigator.accelerometer.watchAcceleration(onSuccess, onError,
options);
để thiết lập tần số thành nửa giây thì ta sử dụng như sau :
var options = { frequency: 500 }; // Update every .5 seconds
var watchID = navigator.accelerometer.watchAcceleration(onSuccess, onError,
options);
3.7.Ví dụ về cách sử dụng gia tốc kế ACCELEROMETER
<!DOCTYPE html>
<html>
<head>
<title>Acceleration Example</title>
<script type=”text/javascript” charset=”utf-8” src=”phonegap.js”></script>
<script type=”text/javascript” charset=”utf-8”>
var watchID = null;
// Wait for PhoneGap to load
document.addEventListener(“deviceready”, onDeviceReady, false);
// PhoneGap is ready, start watching
function onDeviceReady() {
startWatch();
}
// Start watching the acceleration
function startWatch() {
// Update acceleration every 3 seconds
var options = { frequency: 3000 };
watchID = navigator.accelerometer.watchAcceleration(onSuccess, onError,
options);
}
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 40
41. Phonegap cho người mới học
// Stop watching the acceleration
function stopWatch() {
if (watchID) {
navigator.accelerometer.clearWatch(watchID);
watchID = null;
}
}
// onSuccess: Get a snapshot of the current acceleration
function onSuccess(acceleration) {
var element = document.getElementById(„accelerometer‟);
element.innerHTML = „Acceleration X: „ + acceleration.x + „<br />‟ +
„Acceleration Y: „ + acceleration.y + „<br />‟ +
„Acceleration Z: „ + acceleration.z + „<br />‟ +
„Timestamp: „ + acceleration.timestamp + „<br />‟;
}
// onError: Failed to get the acceleration
//
function onError() {
alert(„oooops!‟);
}
</script>
</head>
<body>
<div id=”accelerometer”>Waiting for accelerometer...</div>
<button onclick=”stopWatch();”>Stop Watching</button>
</body>
</html>
Cách thức ví dụ hoạt động
Khi ứng dụng vừa load xong thì hàm startWatch() được kích hoạt.hàm này sử dụng phương
thức watchAcceleration() để khởi tạo việc xem dữ liệu gia tốc kế và báo cáo lại thông tin về
tọa độ trục XYZ và timestamp rồi in ra hiện thị HTML
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 41
42. Phonegap cho người mới học
IV.Ví trí địa lý Geolocation
4.1.Thế nào là vị trí địa lý Geolocation ?
Geolocation bao hàm cách xác định vị trí địa lý thật của 1 thiết bị - trong trường hợp này là
điện thoại smartphone mà ta sử dụng.cách thông thường nhất để xác định vị trí địa lý của 1
thiết bị là sử dụng tính năng GPS chứa bên trong smartphone – dùng để xác định kinh độ và
vĩ độ
Tuy nhiên, 1 vài thiết bị có thể sử dụng những dịch vụ khác để suy luận ra 1 ví trí – ví dụ
như : 1 địa chỉ IP, xác định tần số radio (RFID), địa chỉ truy cập wifi (MAC), hay trạm phát
sóng.bởi vì có rất nhiều phương thức khác nhau được sử dụng để thu thập các tọa độ ví trí,
do vậy không ai có thể đảm bảo rằng phonegap API sẽ trả về vị trí thật sự của thiết bị
4.2.Cách sử dụng Geolocation
Lí do hiển nhiên nhất để sử dụng Geolocation gần đây là xu hướng dùng để xác định nơi
mà có 1 vài thứ xảy ra.ví dụ như dữ liệu Geolocation được thêm vào các bức ảnh hay trên
các mạng xã hội, …
Tuy nhiên các ứng dụng Geolocation chử yếu chỉ rõ các vị trí ở thế giới thật ( giống như nhà
hàng, quán bar, …) và kết hợp chúng với thiết bị trên tay người sử dụng
Theo đó có 3 cách sáng tạo mà ta có thể thêm dữ liệu geolocation vào bất cứ ứng dụng nào
:
Không chỉ thêm kinh độ và vĩ độ mà còn thêm vào tiêu đề và độ cao vào các bức ảnh
Cho phép người dùng tích vào bất cứ tọa độ do đó họ có thể lưu giữ được dấu vết
quãng đường mình đã đi
4.3.Các mẫu ứng dụng về Geolocation
Các ứng dụng về Geolocation nổi tiếng là “foursquare” (hình 8-1) và “Gowalla” (hình 8-2).cả
2 ứng dụng đều là miễn phí và tương thích với các nền tảng thiết bị khác nhau.ta có thể
đăng ký và bắt đầu sử dụng chúng.nếu ta đang ở trong 1 nhà hàng ăn hay 1 quán bar thì ta
có thể sử dụng chúng để tích vào và sử dụng facebook hay twitter để thông báo cho bạn bè
biết nơi ta đang có mặt
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 42
43. Phonegap cho người mới học
Cả 2 ứng dụng “Gowalla” và “foursquare” đều hướng tới mỗi trường mạng xã hội – những
người sử dụng không chỉ tích vào vị trí của mình mà còn truy cập được vào các cuộc hẹn và
các lời đề nghị được tạo bởi vị trí của các nhà bán lẻ.
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 43
44. Phonegap cho người mới học
Tất nhiên, nếu ta là người dùng facebook hay google+, thì ta có thể tham gia vào trong các
games liên quan đến geolocation.như hình 8-3, các địa điểm trong facebook cho phép ta
đăng ký 1 vị trí và sau đó nói cho những người bạn khác nơi mà ta có mặt
Trên google+, ta có thể dễ dàng đăng ký 1 địa điểm bằng cách tích vào ô checkbox ở góc
phía trên bên phải của trang như hình 8-4.sau đó ta có thể lựa chọn 1 ví trí từ danh sách
các địa điểm lân cận và thêm 1 bản ghi chú và 1 bức ảnh và đăng nó lên
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 44
45. Phonegap cho người mới học
4.4.Các đối tượng POSITION, POSITIONERROR, và
COORDINATES
PhoneGap Geolocation API sử dụng 3 đối tượng chỉ đọc chứa các thông tin geolocation :
Position
PositionError
Coordinates
Mỗi đối tượng trong các đối tượng trên được tạo ra và tính toán khi ta sử dụng các phương
thức khác nhau, và dữ liệu được trả về giống như 1 phần của các hàm gọi lại callback
4.4.1.Đối tượng Position Object
Đối tượng Position Object chứa các tọa độ được tạo ra bởi geolocation API và nó gồm 2
thuộc tinh sau :
Coords – đây là 1 tập các tọa độ địa lý (như kinh độ, vĩ độ, độ cao,..)
Timestamp – thời điểm được tạo tính bằng mili giây
Ví dụ gọi hàm geolocation.getCurrentPosition() như ở ví dụ dưới thì kết quả trả về gồm có
kinh độ, vĩ độ, độ cao, độ chính xác, độ chính xác độ cao, tiêu đề, tấc độ, và timestamp,
được truyền vào hàm onSuccess :
var onSuccess = function(position) {
alert(„Latitude: „ + position.coords.latitude + „n‟ +
„Longitude: „ + position.coords.longitude + „n‟ +
„Altitude: „ + position.coords.altitude + „n‟ +
„Accuracy: „ + position.coords.accuracy + „n‟ +
„Altitude Accuracy: „ + position.coords.altitudeAccuracy + „n‟ +
„Heading: „ + position.coords.heading + „n‟ +
„Speed: „ + position.coords.speed + „n‟ +
„Timestamp: „ + new Date(position.timestamp) + „n‟);
}
function onError(error) {
alert(„code: „ + error.code + „n‟ +
„message: „ + error.message + „n‟);
}
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 45
46. Phonegap cho người mới học
navigator.geolocation.getCurrentPosition(onSuccess, onError);
4.4.2.Đối tượng PositionError
như ta nhìn thấy trong ví dụ trước thì ta cũng có khả năng truy cập vào 1 hàm onError
callback.hàm này trả về 2 thuộc tính của vấn đề là error code và error message
error code sẽ là 1 trong những lỗi đã được định nghĩa trước như sau :
PositionError.PERMISSION_DENIED
PositionError.POSITION_UNAVAILABLE
PositionError.TIMEOUT
Và error message sẽ được miêu tả chi tiết lỗi gặp phải
4.4.3.Đối tượng Coordinates Object
Đối tượng Coordinates Object bao gồm 1 tập các thuộc tính chỉ đọc.ta đã gặp chúng trong
ví dụ trước như là 1 phần của đối tượng Position object.trong thực tế, thì dữ liệu
Coordinates được đính thêm vào đối tượng Position object và sau đó được trả về thông qua
hàm onSuccess
Các thuộc tính của đối tượng Coordinates object:
Vĩ độ latitude – là kiểm số thực
Kinh độ longitude - là kiểm số thực
Dộ cao altitude – độ cao tính bằng m so với mực nước biển
Dộ chính xác accuracy – là độ chính xác của việc đọc vĩ độ/kinh độ
Dộ chính xác altitudeAccuracy – là độ chính xác của độ cao
Tiêu đề heading – là hướng di chuyển
Tấc độ speed – là tấc độ so với mặt đất (m/s)
4.5.Ví dụ minh họa về geolocation
<!DOCTYPE html>
<html>
<head>
<title>Device Properties Example</title>
<script type=”text/javascript” charset=”utf-8” src=”phonegap.js”></script>
<script type=”text/javascript” charset=”utf-8”>
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 46
47. Phonegap cho người mới học
document.addEventListener(“deviceready”, onDeviceReady, false);
var watchID = null;
function onDeviceReady() {
// Update every 3 seconds
var options = { frequency: 3000 };
watchID = navigator.geolocation.watchPosition(onSuccess, onError, options);
}
// onSuccess Geolocation
//
function onSuccess(position) {
var element = document.getElementById(„geolocation‟);
element.innerHTML =‟Latitude: „ + position.coords.latitude + „<br />‟ +
„Longitude: „ + position.coords.longitude + „<br />‟ +
„<hr />‟ + element.innerHTML;
}
// onError Callback receives a PositionError object
//
function onError(error) {
alert(„code: „ + error.code + „n‟ +
„message: „ + error.message + „n‟);
}
</script>
</head>
<body>
<p id=”geolocation”>Watching geolocation...</p>
</body>
</html>
Cách ví dụ hoạt động
Khi ứng dụng được tải xong thì phương thức watchPosition() được kích hoạt và cứ mỗi 3
giây thì thiết bị lại nhận được 1 cập nhật mới về kinh độ và vĩ độ
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 47
48. Phonegap cho người mới học
4.6.Cách cải thiện giao diện và trải nghiệm của người dùng
Nếu ta nhìn vào giao diện của ứng dụng geolocation mà ta đã tạo ra ở trên thì ta sẽ nhận
thấy nó không được đẹp và nó trông giống như hình 8-5.thực tế thì, tất cả những gì nó thực
hiện là thêm liên tục các thông tin về geolocation vào trong màn hình cho tới khi ta tắt nó
Để tiến hành giao diện UI, đầu tiên ta phải chắc chắn rằng project của ta có các thư mục
jQTouch cần thiết ở bên trong nó như đã được mô tả trong chương trước.lưu ý đặt lên đầu
đoạn code sau đoạn script tải phonegap.js:
<style type=”text/css” media=”screen”>@import “jqtouch/jqtouch.css”;</style>
<style type=”text/css” media=”screen”>@import “themes/jqt/theme.css”;</style>
<script src=”jqtouch/jquery-1.4.2.js” type=”text/javascript” charset=”utf-8”></script>
<script src=”jqtouch/jqtouch.js” type=”application/x-javascript” charset=”utf-8”></script>
<script type=”text/javascript” charset=”utf-8”>
var jQT = new $.jQTouch({
icon: „jqtouch.png‟,
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 48
49. Phonegap cho người mới học
icon4: „jqtouch4.png‟,
addGlossToIcon: false,
startupScreen: „jqt_startup.png‟,
statusBar: „black‟,
preloadImages: [
„themes/jqt/img/activeButton.png‟,
„themes/jqt/img/back_button.png‟,
„themes/jqt/img/back_button_clicked.png‟,
„themes/jqt/img/blueButton.png‟,
„themes/jqt/img/button.png‟,
„themes/jqt/img/button_clicked.png‟,
„themes/jqt/img/grayButton.png‟,
„themes/jqt/img/greenButton.png‟,
„themes/jqt/img/redButton.png‟,
„themes/jqt/img/whiteButton.png‟,
„themes/jqt/img/loading.gif‟
]
});
</script>
Tiếp theo, ta cần 1 đoạn HTML đặt trong thẻ <body> như sau :
<div id=”home” class=”current”>
<div class=”toolbar”>
<h1>Geolocation</h1>
</div>
<p id=”geolocation”>Watching geolocation...</p>
</div>
Kết quả được làm đẹp sẽ trông như hình 8-6
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 49
50. Phonegap cho người mới học
Đây vẫn chưa phải là giao diện UI đẹp, nhưng nó nhìn đẹp hơn ví dụ gốc.làm cách nào ta
có thể cải tiến nó ? đơn giản để làm được điều này, ta có thể đơn giản hóa dữ liệu trả về từ
hàm onSuccess function.để thay thế việc in lan man toàn bộ thông tin, ta có thể làm như
sau :
function onSuccess(position) {
var element = document.getElementById(„geolocation‟);
element.innerHTML =‟Position: „ + position.coords.latitude + „, „ +
+ position.coords.longitude + „<br />‟ +
„<br/>‟ + element.innerHTML;
}
Kết quả sẽ giống như hình 8-7.thông tin sẽ trở nên gọn gàng hơn
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 50
51. Phonegap cho người mới học
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 51
52. Phonegap cho người mới học
V.Media
5.1.Các Media Files là gì ?
Media API cho phép ta ghi lại và chơi các file âm thanh audio trên 1 thiết bị.đặc biệt là ta có
thể chạy các files audio được load trực tiếp trên thiết bị hay chơi các files audio tải về thông
qua internet
Chú ý: 1 điều quan trọng cần phải nhớ rằng là thực thi PhoneGap hiện tại không
theo chuẩn của W3C giành cho media, và bất cứ các thực thi trong tương lai có thể
xung đột với các APIs hiện tại.xa hơn nữa thì các Media API chỉ tương thức với các thiết
bị Android và iOS
5.2.Cách sử dụng các Media Files
Có khả năng chơi music hat các audio files khác từ trong smartphone 1 cách khá thuận
tiện.ví dụ, nếu ta đang trên 1 hành trình dài và không có 1 quyển sách nào trên tay, không
thành vấn đề, ta có thể nghe 1 cuốn sách audio
Xa hơn, khả năng ghi lại audio cũng trở nên thuận tiện.nếu ta đang chờ cho 1 cuộc hẹn nào
đó và cần ghi lại 1 vài lời nhắc nhở sau đó thì ta có thể sử dụng thiết bị giống như 1 máy ghi
chú.chất lương của audio được ghi lại khá ổn, file xuất ra là theo định dạng mp3, nên thật
dễ dàng kết hợp chặt chẽ với các công cụ chỉnh sửa audio
Theo đó có 3 cách để thêm việc chạy/ghi âm lại media vào ứng dụng :
Tạo ra 1 trình ghi âm đơn giản giúp ích cho việc nhớ nhở
Kết hợp chặt chẽ với các tính năng recording/playback với 1 ứng dụng ghi chú giống
như Evernote
Tạo ra 1 trình chơi audio đơn giản để chạy các files trên web
5.3.Các ứng dụng mẫu sử dụng media API
Các ứng dụng tiêu chuẩn trên iOS như “Voice Memos” và “iPod” (như hình 9-1) cho phép ta
ghi âm lại các ghi chú bằng audio và chơi các audio files
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 52
53. Phonegap cho người mới học
Tất nhiên, chỉ vì apple cung cấp những app này miễn phí thì không có nghĩa là những app
khác giống như vậy không tồn tại.hình 9-2 chỉ ra rằng có vô số các app như vậy trên app
store.và tất cả chúng cung cấp cùng những tính năng cơ bản như nhau - record, pause,
play, và stop recording.1 vài có thêm khả năng chia sẻ các file ghi âm qua e-mail, các dịch
vụ chia sẻ media
Nếu ta tìm kiếm các ứng dụng music apps, thì ta cũng có kha khá 1 danh sách các apps
như hình 9-3
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 53
54. Phonegap cho người mới học
1 lựa chọn phổ biến là “Pandora” như hình 9-4, ứng dụng này hướng tới dịch vụ music trên
web.và dịch vụ “Pandora” đưa ra 1 cách thú vị tới cùng 1 bản nhạc.điều này có nghĩa là khi
ta muốn nghe music của nhóm nhạc Creedence Clearwater Revival (CCR).thì ta tạo ra 1
trạm “station” dành cho ban nhạc này và sau đó “Pandora” sẽ tìm kiếm âm nhạc chứ không
chỉ chọn lựa các bản ghi âm của CCR mà còn tìm kiếm các bài hát khác từ các ban nhạc
khác cùng thể loại nhạc mà ta muốn tìm.sau đó ta có thể chia sẻ trạm “radio station” mới
này cho những người khác
Đa số (không phải tất cả ) các ứng dụng âm nhạc phổ biến đều có mặt trên android.chú ý
rằng, như trong hình 9-5 thì giao diện của “Pandora” rất trực quan và đẹp
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 54
55. Phonegap cho người mới học
5.4.Đối tượng MEDIA OBJECT
var media = new Media(src, mediaSuccess, [mediaError], [mediaStatus]);
Đối tượng PhoneGap Media object gồm 4 tham số, 3 trong số đó là tùy chọn :
src – là 1 URL (là URL dẫn tới 1 file trên internet) chứa nội dụng audio
mediaSuccess – (tham số tùy chọn) đây là 1 hàm callback được gọi sau khi 1 đối
tượng Media object được hoàn thành xong thao tác hiện tại như play, record, và
stop (ví dụ như ta đang play 1 bản nhạc thì phải khi chơi xong hết bản nhạc ấy
thì các lệnh trong hàm mediaSuccess mới được thực hiện )
mediaError – (tham số tùy chọn) đây là 1 hàm callback được gọi khi xảy ra lỗi
mediaStatus - (tham số tùy chọn) đây là 1 hàm callback được gọi để xác định
những thay đổi trạng thái
các tham số chỉ đọc :
position : là vị trí trong phạm vị phát audio.chú ý rằng nó không được cập
nhập trong suốt quá trình chạy mà phải gọi phương thức getCurrentPosition() để cập
nhập
duration : là tổng số thời gian của file media tính theo giây
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 55
56. Phonegap cho người mới học
5.5.Cách sừ dụng các phương thức methods
trong phần này thì ta học cách sử dụng các phương thức chính trong media API.các
phương thức này cho phép ta thao tác play, record, và pause,…
Chú ý: nếu ta làm việc với phiên bản Phonegap 0.9.4 trở về trước thì ta phải chắc
chắn rằng các hàm callback phải trong phạm vi toàn cục
5.5.1.phương thức media.getCurrentPosition
để lấy về vị trí hiện tại trong phạm vi 1 audio file, ta sử dụng phương thức
media.getCurrentPosition như sau :
media.getCurrentPosition(mediaSuccess,[mediaError]);
tham số thứ 1 là hàm mediaSuccess là 1 hàm callback được gọi với vị trí
position hiện tại (được tính bằng giây) và tham số thứ 2 tùy chọn là mediaError
là 1 hàm callback được gọi trong trường hợp xảy ra lỗi
phương thức getCurrentPosition() là 1 hàm không đồng bộ (nghĩa là nó không tự gọi lại
liên tục theo chu kì mà muốn như vậy ta phải thiết lập bằng tay) dùng để trả về vị trí hiện tại
của audio file nằm dưới 1 đối tượng Media object, và nó cũng cập nhật tham số
position trong phạm vi đối tượng Media object.
Phương thức này hỗ trợ các nền tảng :
Android
BlackBerry WebWorks (OS 5.0 and higher)
iOS
Windows Phone 7 ( Mango )
Ví dụ mẫu :
// Audio player
//
var my_media = new Media(src, onSuccess, onError);
setInterval(function,mi
llisec,lang)hàm này
// Update media position every second
có tác dụng gọi lặp đi
lặp lại 1 hàm function
nào đó theo 1 chu kỳ
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 56
thời gian millisec
57. Phonegap cho người mới học
var mediaTimer = setInterval(function() {
// get media position
my_media.getCurrentPosition(
// success callback
function( position) {
if (position > -1) {
console.log(( position) + " sec");
}
},
// error callback
function(e) {
console.log("Error getting pos=" + e);
}
);
}, 1000);
5.5.2.Phương thức media.getDuration
media.getDuration();
Phương thức getDuration() là 1 hàm không đồng bộ (nghĩa là nó không tự gọi lại liên tục
theo chu kì mà muốn như vậy ta phải thiết lập bằng tay) dùng để trả về khoảng thời gian của
audio file được tính theo giây nếu đã biết.còn nếu khoảng thời gian là chưa xác định thì nó
trả về giá trị là -1
Phương thức này hỗ trợ các nền tảng :
Android
BlackBerry WebWorks (OS 5.0 and higher)
iOS
Windows Phone 7 ( Mango )
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 57
58. Phonegap cho người mới học
Ví dụ mẫu :
// Audio player
//
var my_media = new Media(src, onSuccess, onError); clearInterval(id_of_setinterval)
xóa bỏ đi sự lặp lại của hàm
// Get duration function được lặp bởi
setInterval với
var counter = 0;
var timerDur = setInterval(function() { var id_of_setinterval =
setInterval(function,milisec)
counter = counter + 100;
if (counter > 2000) {
clearInterval(timerDur);
}
var dur = my_media.getDuration();
if (dur > 0) {
clearInterval(timerDur);
document.getElementById('audio_duration').innerHTML = (dur) + " sec";
}
}, 100);
5.5.3.Phương thức media.pause
Phương thức này dùng để tạm dừng việc chạy 1 audio file
media.pause();
hàm media.pause() là 1 hàm không đồng bộ dùng để tạm dừng 1 audio file
phương thức này hỗ trợ các nền tảng :
Android
BlackBerry WebWorks (OS 5.0 and higher)
iOS
Windows Phone 7 ( Mango )
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 58
59. Phonegap cho người mới học
Ví dụ mẫu về tạm dừng chạy audio file sau khi chạy được 10 giây :
// Play audio
//
function playAudio(url) {
// Play the audio file at url
var my_media = new Media url, (
// success callback
function() {
console.log("playAudio():Audio Success");
},
// error callback
function(err) {
console.log("playAudio():Audio Error: "+err);
)
} ;
// Play audio
my_media.play();
// Pause after 10 seconds
setTimeout(code,millisec,lang)
setTimeout(function() {
hàm hẹn giờ gọi hàm
media.pause(); (không thực hiện lặp lại theo
}, 10000); chu kì)
}
5.5.4.Phương thức media.play
Phương thức này dùng để khởi chạy hay tiếp tục chạy 1 audio file
media.play();
hàm media.play() là 1 hàm không đồng bộ.để thực sự chạy được 1 file thì ta cần chuyển
tiếp vào 1 URL hay 1 đường dẫn path tới nơi chứa file như sau :
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 59
60. Phonegap cho người mới học
// Play audio
//
function playAudio(url) {
// Play the audio file at url
var my_media = new Media(url,
// success callback
function() {
console.log("playAudio():Audio Success");
},
// error callback
function(err) {
console.log("playAudio():Audio Error: "+err);
});
// Play audio
my_media.play();
}
Chú ý :
Trong BlackBerry WebWorks :
Các thiết bị blackberry hỗ trợ giới hạn các kênh audio cùng lúc.các thiết bị CDMA chỉ
hỗ trợ 1 kênh audio.những thiết bị khác hỗ trợ 2 kênh audio cùng lúc.do vậy việc cố
gắng chơi nhiều hơn 2 audio files cùng lúc thì kết quả là audio file bật trước đó sẽ bị
ngừng lại
Trong iOS :
numberOfLoops
được chuyển tiếp vào trong lựa chọn options của phương thức play để định nghĩa số lần mà
ta muốn media file được chơi :
var myMedia = new Media("http://audio.ibeat.org/content/p1rj1s/p1rj1s_-_rockGuitar.mp3")
myMedia.play({ numberOfLoops: 2 })
Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 60