SlideShare une entreprise Scribd logo
1  sur  155
Télécharger pour lire hors ligne
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Phonegap cho người mới học




Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum   35
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Phonegap cho người mới học




Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum   51
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
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
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
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
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
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
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
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
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
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học
Phonegap cho người mới học

Contenu connexe

Tendances

56123159 android
56123159 android56123159 android
56123159 androidHieu Pham
 
Bao cao-tot-nghiep-monitoring
Bao cao-tot-nghiep-monitoringBao cao-tot-nghiep-monitoring
Bao cao-tot-nghiep-monitoringlaonap166
 
Tìm hiểu công nghệ ảo hóa và đề xuất mô hình triển khai cho các đơn vị vừa và...
Tìm hiểu công nghệ ảo hóa và đề xuất mô hình triển khai cho các đơn vị vừa và...Tìm hiểu công nghệ ảo hóa và đề xuất mô hình triển khai cho các đơn vị vừa và...
Tìm hiểu công nghệ ảo hóa và đề xuất mô hình triển khai cho các đơn vị vừa và...sunflower_micro
 
Hướng dẫn sử dụng powerpoint 2010
Hướng dẫn sử dụng powerpoint 2010Hướng dẫn sử dụng powerpoint 2010
Hướng dẫn sử dụng powerpoint 2010NhomHTTP
 
NGHIÊN CỨU XÂY DỰNG ỨNG DỤNG CHO HỆ ĐIỀU HÀNH iOS
NGHIÊN CỨU XÂY DỰNG ỨNG DỤNG CHO HỆ ĐIỀU HÀNH iOSNGHIÊN CỨU XÂY DỰNG ỨNG DỤNG CHO HỆ ĐIỀU HÀNH iOS
NGHIÊN CỨU XÂY DỰNG ỨNG DỤNG CHO HỆ ĐIỀU HÀNH iOSVàng Cao Thanh
 
Bao cao cuoi ky - ATHENA
Bao cao cuoi ky - ATHENABao cao cuoi ky - ATHENA
Bao cao cuoi ky - ATHENAThongErik
 
Thiết kế hệ thống nhúng cho thiết bị nội soi nha khoa
Thiết kế hệ thống nhúng cho thiết bị nội soi nha khoaThiết kế hệ thống nhúng cho thiết bị nội soi nha khoa
Thiết kế hệ thống nhúng cho thiết bị nội soi nha khoahttps://www.facebook.com/garmentspace
 
[Thực tập][GameLoft] Lập trình game đa nền tảng trên di động
[Thực tập][GameLoft] Lập trình game đa nền tảng trên di động[Thực tập][GameLoft] Lập trình game đa nền tảng trên di động
[Thực tập][GameLoft] Lập trình game đa nền tảng trên di độngTrung Hiếu Trần
 
Hướng Dẫn Công Cụ
Hướng Dẫn Công CụHướng Dẫn Công Cụ
Hướng Dẫn Công CụNghiaNguyen325
 
Giáo trình Microsoft Powerpoint 2007
Giáo trình Microsoft Powerpoint 2007Giáo trình Microsoft Powerpoint 2007
Giáo trình Microsoft Powerpoint 2007Huynh Bao Thien
 
Sách hướng dẫn sử dụng Powerpoint 2010
Sách hướng dẫn sử dụng Powerpoint 2010Sách hướng dẫn sử dụng Powerpoint 2010
Sách hướng dẫn sử dụng Powerpoint 2010Tâm Việt Group
 
Giáo trình asp net 3.5 sử dụng VS 2008 - Nhất Nghệ
Giáo trình asp net 3.5 sử dụng VS 2008 - Nhất NghệGiáo trình asp net 3.5 sử dụng VS 2008 - Nhất Nghệ
Giáo trình asp net 3.5 sử dụng VS 2008 - Nhất NghệMasterCode.vn
 
Giáo trình Powerpoint 2010 - TTV
Giáo trình Powerpoint 2010 - TTVGiáo trình Powerpoint 2010 - TTV
Giáo trình Powerpoint 2010 - TTVMinh Đức Nguyễn
 
Tieng viet powerpoint 2010 training book
Tieng viet powerpoint 2010 training bookTieng viet powerpoint 2010 training book
Tieng viet powerpoint 2010 training bookDai Van Tuan
 
Giáo trình kế toán máy kế toán hành chính sự nghiệp misa data4u
Giáo trình kế toán máy kế toán hành chính sự nghiệp misa data4uGiáo trình kế toán máy kế toán hành chính sự nghiệp misa data4u
Giáo trình kế toán máy kế toán hành chính sự nghiệp misa data4uXephang Daihoc
 

Tendances (18)

56123159 android
56123159 android56123159 android
56123159 android
 
Bao cao-tot-nghiep-monitoring
Bao cao-tot-nghiep-monitoringBao cao-tot-nghiep-monitoring
Bao cao-tot-nghiep-monitoring
 
Luận văn: Công nghệ ảo hóa Docker và ứng dụng tại ĐH Hải Phòng
Luận văn: Công nghệ ảo hóa Docker và ứng dụng tại ĐH Hải PhòngLuận văn: Công nghệ ảo hóa Docker và ứng dụng tại ĐH Hải Phòng
Luận văn: Công nghệ ảo hóa Docker và ứng dụng tại ĐH Hải Phòng
 
Tìm hiểu công nghệ ảo hóa và đề xuất mô hình triển khai cho các đơn vị vừa và...
Tìm hiểu công nghệ ảo hóa và đề xuất mô hình triển khai cho các đơn vị vừa và...Tìm hiểu công nghệ ảo hóa và đề xuất mô hình triển khai cho các đơn vị vừa và...
Tìm hiểu công nghệ ảo hóa và đề xuất mô hình triển khai cho các đơn vị vừa và...
 
Hướng dẫn sử dụng powerpoint 2010
Hướng dẫn sử dụng powerpoint 2010Hướng dẫn sử dụng powerpoint 2010
Hướng dẫn sử dụng powerpoint 2010
 
NGHIÊN CỨU XÂY DỰNG ỨNG DỤNG CHO HỆ ĐIỀU HÀNH iOS
NGHIÊN CỨU XÂY DỰNG ỨNG DỤNG CHO HỆ ĐIỀU HÀNH iOSNGHIÊN CỨU XÂY DỰNG ỨNG DỤNG CHO HỆ ĐIỀU HÀNH iOS
NGHIÊN CỨU XÂY DỰNG ỨNG DỤNG CHO HỆ ĐIỀU HÀNH iOS
 
Bao cao cuoi ky - ATHENA
Bao cao cuoi ky - ATHENABao cao cuoi ky - ATHENA
Bao cao cuoi ky - ATHENA
 
Thiết kế hệ thống nhúng cho thiết bị nội soi nha khoa
Thiết kế hệ thống nhúng cho thiết bị nội soi nha khoaThiết kế hệ thống nhúng cho thiết bị nội soi nha khoa
Thiết kế hệ thống nhúng cho thiết bị nội soi nha khoa
 
[Thực tập][GameLoft] Lập trình game đa nền tảng trên di động
[Thực tập][GameLoft] Lập trình game đa nền tảng trên di động[Thực tập][GameLoft] Lập trình game đa nền tảng trên di động
[Thực tập][GameLoft] Lập trình game đa nền tảng trên di động
 
Hướng Dẫn Công Cụ
Hướng Dẫn Công CụHướng Dẫn Công Cụ
Hướng Dẫn Công Cụ
 
Giáo trình Microsoft Powerpoint 2007
Giáo trình Microsoft Powerpoint 2007Giáo trình Microsoft Powerpoint 2007
Giáo trình Microsoft Powerpoint 2007
 
Đề tài: Tìm hiểu phần mềm nguồn mở Nuke Viet và ứng dụng, HOT
Đề tài: Tìm hiểu phần mềm nguồn mở Nuke Viet và ứng dụng, HOTĐề tài: Tìm hiểu phần mềm nguồn mở Nuke Viet và ứng dụng, HOT
Đề tài: Tìm hiểu phần mềm nguồn mở Nuke Viet và ứng dụng, HOT
 
Sách hướng dẫn sử dụng Powerpoint 2010
Sách hướng dẫn sử dụng Powerpoint 2010Sách hướng dẫn sử dụng Powerpoint 2010
Sách hướng dẫn sử dụng Powerpoint 2010
 
Giáo trình asp net 3.5 sử dụng VS 2008 - Nhất Nghệ
Giáo trình asp net 3.5 sử dụng VS 2008 - Nhất NghệGiáo trình asp net 3.5 sử dụng VS 2008 - Nhất Nghệ
Giáo trình asp net 3.5 sử dụng VS 2008 - Nhất Nghệ
 
Lập trình java
Lập trình javaLập trình java
Lập trình java
 
Giáo trình Powerpoint 2010 - TTV
Giáo trình Powerpoint 2010 - TTVGiáo trình Powerpoint 2010 - TTV
Giáo trình Powerpoint 2010 - TTV
 
Tieng viet powerpoint 2010 training book
Tieng viet powerpoint 2010 training bookTieng viet powerpoint 2010 training book
Tieng viet powerpoint 2010 training book
 
Giáo trình kế toán máy kế toán hành chính sự nghiệp misa data4u
Giáo trình kế toán máy kế toán hành chính sự nghiệp misa data4uGiáo trình kế toán máy kế toán hành chính sự nghiệp misa data4u
Giáo trình kế toán máy kế toán hành chính sự nghiệp misa data4u
 

En vedette

Tim hieu ma nguon mo phone gap va xay dung ung dung ngo quang trung
Tim hieu ma nguon mo phone gap va xay dung ung dung   ngo quang trungTim hieu ma nguon mo phone gap va xay dung ung dung   ngo quang trung
Tim hieu ma nguon mo phone gap va xay dung ung dung ngo quang trungNgo Trung
 
Thiết kế mạng máy ATM dựa vào thuyết cơ sở dữ liệu phân tán
Thiết kế mạng máy ATM dựa vào thuyết cơ sở dữ liệu phân tánThiết kế mạng máy ATM dựa vào thuyết cơ sở dữ liệu phân tán
Thiết kế mạng máy ATM dựa vào thuyết cơ sở dữ liệu phân tánNgo Trung
 
lý thuyết cơ sở dữ liệu phân tán
lý thuyết cơ sở dữ liệu phân tánlý thuyết cơ sở dữ liệu phân tán
lý thuyết cơ sở dữ liệu phân tánNgo Trung
 
Advanced programing in phonegap
Advanced programing in phonegapAdvanced programing in phonegap
Advanced programing in phonegapRakesh Jha
 
php với oracle database
php với oracle databasephp với oracle database
php với oracle databaseNgo Trung
 
PhoneGap in 60 Minutes or Less
PhoneGap in 60 Minutes or LessPhoneGap in 60 Minutes or Less
PhoneGap in 60 Minutes or LessTroy Miles
 
Using Clojure, NoSQL Databases and Functional-Style JavaScript to Write Gext-...
Using Clojure, NoSQL Databases and Functional-Style JavaScript to Write Gext-...Using Clojure, NoSQL Databases and Functional-Style JavaScript to Write Gext-...
Using Clojure, NoSQL Databases and Functional-Style JavaScript to Write Gext-...Stefan Richter
 
[Quản trị hệ thống phân phối] Mô hình hệ thống phân phối online
[Quản trị hệ thống phân phối] Mô hình hệ thống phân phối online[Quản trị hệ thống phân phối] Mô hình hệ thống phân phối online
[Quản trị hệ thống phân phối] Mô hình hệ thống phân phối onlineVu Huy
 

En vedette (8)

Tim hieu ma nguon mo phone gap va xay dung ung dung ngo quang trung
Tim hieu ma nguon mo phone gap va xay dung ung dung   ngo quang trungTim hieu ma nguon mo phone gap va xay dung ung dung   ngo quang trung
Tim hieu ma nguon mo phone gap va xay dung ung dung ngo quang trung
 
Thiết kế mạng máy ATM dựa vào thuyết cơ sở dữ liệu phân tán
Thiết kế mạng máy ATM dựa vào thuyết cơ sở dữ liệu phân tánThiết kế mạng máy ATM dựa vào thuyết cơ sở dữ liệu phân tán
Thiết kế mạng máy ATM dựa vào thuyết cơ sở dữ liệu phân tán
 
lý thuyết cơ sở dữ liệu phân tán
lý thuyết cơ sở dữ liệu phân tánlý thuyết cơ sở dữ liệu phân tán
lý thuyết cơ sở dữ liệu phân tán
 
Advanced programing in phonegap
Advanced programing in phonegapAdvanced programing in phonegap
Advanced programing in phonegap
 
php với oracle database
php với oracle databasephp với oracle database
php với oracle database
 
PhoneGap in 60 Minutes or Less
PhoneGap in 60 Minutes or LessPhoneGap in 60 Minutes or Less
PhoneGap in 60 Minutes or Less
 
Using Clojure, NoSQL Databases and Functional-Style JavaScript to Write Gext-...
Using Clojure, NoSQL Databases and Functional-Style JavaScript to Write Gext-...Using Clojure, NoSQL Databases and Functional-Style JavaScript to Write Gext-...
Using Clojure, NoSQL Databases and Functional-Style JavaScript to Write Gext-...
 
[Quản trị hệ thống phân phối] Mô hình hệ thống phân phối online
[Quản trị hệ thống phân phối] Mô hình hệ thống phân phối online[Quản trị hệ thống phân phối] Mô hình hệ thống phân phối online
[Quản trị hệ thống phân phối] Mô hình hệ thống phân phối online
 

Similaire à Phonegap cho người mới học

Bai giang he thong nhung 2010
Bai giang he thong nhung 2010Bai giang he thong nhung 2010
Bai giang he thong nhung 2010Cao Toa
 
Nghiên cứu các phương pháp thông minh để phân loại và định vị sự cố trên...
Nghiên cứu các phương pháp thông minh để phân loại và định vị sự cố trên...Nghiên cứu các phương pháp thông minh để phân loại và định vị sự cố trên...
Nghiên cứu các phương pháp thông minh để phân loại và định vị sự cố trên...Man_Ebook
 
Đề tài: Chiến lược của Apple đối với sản phẩm smarthome, 9 ĐIỂM!
Đề tài: Chiến lược của Apple đối với sản phẩm smarthome, 9 ĐIỂM!Đề tài: Chiến lược của Apple đối với sản phẩm smarthome, 9 ĐIỂM!
Đề tài: Chiến lược của Apple đối với sản phẩm smarthome, 9 ĐIỂM!Viết thuê trọn gói ZALO 0934573149
 
Nova3 m operatormanual
Nova3 m operatormanualNova3 m operatormanual
Nova3 m operatormanualthaianmedical
 
Uoc luong kenh truyen fast fading dua vao bem va giai thuat bayesian
Uoc luong kenh truyen fast  fading dua vao bem va giai thuat bayesianUoc luong kenh truyen fast  fading dua vao bem va giai thuat bayesian
Uoc luong kenh truyen fast fading dua vao bem va giai thuat bayesianThu Thủy Trần
 
Xác định các clophenol trong nước bằng phương pháp sắc ký khí 6734370
Xác định các clophenol trong nước bằng phương pháp sắc ký khí 6734370Xác định các clophenol trong nước bằng phương pháp sắc ký khí 6734370
Xác định các clophenol trong nước bằng phương pháp sắc ký khí 6734370nataliej4
 
Giáo trình hướng dẫn sử dụng phần mềm lập hồ sơ chất lượng công trình phần mề...
Giáo trình hướng dẫn sử dụng phần mềm lập hồ sơ chất lượng công trình phần mề...Giáo trình hướng dẫn sử dụng phần mềm lập hồ sơ chất lượng công trình phần mề...
Giáo trình hướng dẫn sử dụng phần mềm lập hồ sơ chất lượng công trình phần mề...Nguyễn Thế Anh Giaxaydung.vn
 
Huong dan su dung ban day du
Huong dan su dung ban day duHuong dan su dung ban day du
Huong dan su dung ban day duthanh_k8_cntt
 
Giáo trình an toàn thông tin ths.nguyễn công nhật[bookbooming.com]
Giáo trình an toàn thông tin   ths.nguyễn công nhật[bookbooming.com]Giáo trình an toàn thông tin   ths.nguyễn công nhật[bookbooming.com]
Giáo trình an toàn thông tin ths.nguyễn công nhật[bookbooming.com]bookbooming1
 
LUẬN VĂN NGHIÊN CỨU, ỨNG DỤNG CÔNG NGHỆ HYBRID ĐỂ ĐIỀU KHIỂN VÀ GIÁM SÁT ROBO...
LUẬN VĂN NGHIÊN CỨU, ỨNG DỤNG CÔNG NGHỆ HYBRID ĐỂ ĐIỀU KHIỂN VÀ GIÁM SÁT ROBO...LUẬN VĂN NGHIÊN CỨU, ỨNG DỤNG CÔNG NGHỆ HYBRID ĐỂ ĐIỀU KHIỂN VÀ GIÁM SÁT ROBO...
LUẬN VĂN NGHIÊN CỨU, ỨNG DỤNG CÔNG NGHỆ HYBRID ĐỂ ĐIỀU KHIỂN VÀ GIÁM SÁT ROBO...PinkHandmade
 
Nghiên cứu, ứng dụng công nghệ hybrid để điều khiển và giám sát robot công ng...
Nghiên cứu, ứng dụng công nghệ hybrid để điều khiển và giám sát robot công ng...Nghiên cứu, ứng dụng công nghệ hybrid để điều khiển và giám sát robot công ng...
Nghiên cứu, ứng dụng công nghệ hybrid để điều khiển và giám sát robot công ng...nataliej4
 
THIẾT KẾ VÀ LẮP RÁP THIẾT BỊ ĐIỀU KHIỂN QUẠT TỪ XA BẰNG HỒNG NGOẠI.docx
THIẾT KẾ VÀ LẮP RÁP THIẾT BỊ ĐIỀU KHIỂN QUẠT TỪ XA BẰNG HỒNG NGOẠI.docxTHIẾT KẾ VÀ LẮP RÁP THIẾT BỊ ĐIỀU KHIỂN QUẠT TỪ XA BẰNG HỒNG NGOẠI.docx
THIẾT KẾ VÀ LẮP RÁP THIẾT BỊ ĐIỀU KHIỂN QUẠT TỪ XA BẰNG HỒNG NGOẠI.docxDịch Vụ Viết Bài Trọn Gói ZALO 0917193864
 
Khóa Luận Công Tác Văn Thư Lưu Trữ Tại Trường Cao Đẳng Nghề Số 3
Khóa Luận Công Tác Văn Thư Lưu Trữ Tại Trường Cao Đẳng Nghề Số 3Khóa Luận Công Tác Văn Thư Lưu Trữ Tại Trường Cao Đẳng Nghề Số 3
Khóa Luận Công Tác Văn Thư Lưu Trữ Tại Trường Cao Đẳng Nghề Số 3Hỗ Trợ Viết Đề Tài luanvanpanda.com
 
OpenERP 7.0 Release Notes Tiếng Việt
OpenERP 7.0 Release Notes Tiếng ViệtOpenERP 7.0 Release Notes Tiếng Việt
OpenERP 7.0 Release Notes Tiếng ViệtOpenerp Việt Nam
 
Ai cuong-ve-cac-he-thong-thong-tin-quan-ly
Ai cuong-ve-cac-he-thong-thong-tin-quan-lyAi cuong-ve-cac-he-thong-thong-tin-quan-ly
Ai cuong-ve-cac-he-thong-thong-tin-quan-lyGiang Nguyễn
 
Tonghop wcdma
Tonghop wcdmaTonghop wcdma
Tonghop wcdmaruto123
 

Similaire à Phonegap cho người mới học (20)

Bai giang he thong nhung 2010
Bai giang he thong nhung 2010Bai giang he thong nhung 2010
Bai giang he thong nhung 2010
 
Nghiên cứu các phương pháp thông minh để phân loại và định vị sự cố trên...
Nghiên cứu các phương pháp thông minh để phân loại và định vị sự cố trên...Nghiên cứu các phương pháp thông minh để phân loại và định vị sự cố trên...
Nghiên cứu các phương pháp thông minh để phân loại và định vị sự cố trên...
 
Luận văn: Nghiên cứu, thiết kế, chế tạo mobile robot tự hành tích hợp
Luận văn: Nghiên cứu, thiết kế, chế tạo mobile robot tự hành tích hợpLuận văn: Nghiên cứu, thiết kế, chế tạo mobile robot tự hành tích hợp
Luận văn: Nghiên cứu, thiết kế, chế tạo mobile robot tự hành tích hợp
 
Đề tài: Chiến lược của Apple đối với sản phẩm smarthome, 9 ĐIỂM!
Đề tài: Chiến lược của Apple đối với sản phẩm smarthome, 9 ĐIỂM!Đề tài: Chiến lược của Apple đối với sản phẩm smarthome, 9 ĐIỂM!
Đề tài: Chiến lược của Apple đối với sản phẩm smarthome, 9 ĐIỂM!
 
Bài mẫu Tiểu luận Chiến Lược Của Apple Cho Sản Phẩm, HAY
Bài mẫu Tiểu luận Chiến Lược Của Apple Cho Sản Phẩm, HAYBài mẫu Tiểu luận Chiến Lược Của Apple Cho Sản Phẩm, HAY
Bài mẫu Tiểu luận Chiến Lược Của Apple Cho Sản Phẩm, HAY
 
Nova3 m operatormanual
Nova3 m operatormanualNova3 m operatormanual
Nova3 m operatormanual
 
Uoc luong kenh truyen fast fading dua vao bem va giai thuat bayesian
Uoc luong kenh truyen fast  fading dua vao bem va giai thuat bayesianUoc luong kenh truyen fast  fading dua vao bem va giai thuat bayesian
Uoc luong kenh truyen fast fading dua vao bem va giai thuat bayesian
 
Xác định các clophenol trong nước bằng phương pháp sắc ký khí 6734370
Xác định các clophenol trong nước bằng phương pháp sắc ký khí 6734370Xác định các clophenol trong nước bằng phương pháp sắc ký khí 6734370
Xác định các clophenol trong nước bằng phương pháp sắc ký khí 6734370
 
Giáo trình hướng dẫn sử dụng phần mềm lập hồ sơ chất lượng công trình phần mề...
Giáo trình hướng dẫn sử dụng phần mềm lập hồ sơ chất lượng công trình phần mề...Giáo trình hướng dẫn sử dụng phần mềm lập hồ sơ chất lượng công trình phần mề...
Giáo trình hướng dẫn sử dụng phần mềm lập hồ sơ chất lượng công trình phần mề...
 
Huong dan su dung ban day du
Huong dan su dung ban day duHuong dan su dung ban day du
Huong dan su dung ban day du
 
Giáo trình an toàn thông tin ths.nguyễn công nhật[bookbooming.com]
Giáo trình an toàn thông tin   ths.nguyễn công nhật[bookbooming.com]Giáo trình an toàn thông tin   ths.nguyễn công nhật[bookbooming.com]
Giáo trình an toàn thông tin ths.nguyễn công nhật[bookbooming.com]
 
LUẬN VĂN NGHIÊN CỨU, ỨNG DỤNG CÔNG NGHỆ HYBRID ĐỂ ĐIỀU KHIỂN VÀ GIÁM SÁT ROBO...
LUẬN VĂN NGHIÊN CỨU, ỨNG DỤNG CÔNG NGHỆ HYBRID ĐỂ ĐIỀU KHIỂN VÀ GIÁM SÁT ROBO...LUẬN VĂN NGHIÊN CỨU, ỨNG DỤNG CÔNG NGHỆ HYBRID ĐỂ ĐIỀU KHIỂN VÀ GIÁM SÁT ROBO...
LUẬN VĂN NGHIÊN CỨU, ỨNG DỤNG CÔNG NGHỆ HYBRID ĐỂ ĐIỀU KHIỂN VÀ GIÁM SÁT ROBO...
 
Nghiên cứu, ứng dụng công nghệ hybrid để điều khiển và giám sát robot công ng...
Nghiên cứu, ứng dụng công nghệ hybrid để điều khiển và giám sát robot công ng...Nghiên cứu, ứng dụng công nghệ hybrid để điều khiển và giám sát robot công ng...
Nghiên cứu, ứng dụng công nghệ hybrid để điều khiển và giám sát robot công ng...
 
Đề tài: mô hình đo thử hệ thống băng rộng trên optisystem
Đề tài: mô hình đo thử hệ thống băng rộng trên optisystem Đề tài: mô hình đo thử hệ thống băng rộng trên optisystem
Đề tài: mô hình đo thử hệ thống băng rộng trên optisystem
 
THIẾT KẾ VÀ LẮP RÁP THIẾT BỊ ĐIỀU KHIỂN QUẠT TỪ XA BẰNG HỒNG NGOẠI.docx
THIẾT KẾ VÀ LẮP RÁP THIẾT BỊ ĐIỀU KHIỂN QUẠT TỪ XA BẰNG HỒNG NGOẠI.docxTHIẾT KẾ VÀ LẮP RÁP THIẾT BỊ ĐIỀU KHIỂN QUẠT TỪ XA BẰNG HỒNG NGOẠI.docx
THIẾT KẾ VÀ LẮP RÁP THIẾT BỊ ĐIỀU KHIỂN QUẠT TỪ XA BẰNG HỒNG NGOẠI.docx
 
Đề tài: Tìm hiểu và ứng dụng SEO vào web toancaumobile.vn
Đề tài: Tìm hiểu và ứng dụng SEO vào web toancaumobile.vnĐề tài: Tìm hiểu và ứng dụng SEO vào web toancaumobile.vn
Đề tài: Tìm hiểu và ứng dụng SEO vào web toancaumobile.vn
 
Khóa Luận Công Tác Văn Thư Lưu Trữ Tại Trường Cao Đẳng Nghề Số 3
Khóa Luận Công Tác Văn Thư Lưu Trữ Tại Trường Cao Đẳng Nghề Số 3Khóa Luận Công Tác Văn Thư Lưu Trữ Tại Trường Cao Đẳng Nghề Số 3
Khóa Luận Công Tác Văn Thư Lưu Trữ Tại Trường Cao Đẳng Nghề Số 3
 
OpenERP 7.0 Release Notes Tiếng Việt
OpenERP 7.0 Release Notes Tiếng ViệtOpenERP 7.0 Release Notes Tiếng Việt
OpenERP 7.0 Release Notes Tiếng Việt
 
Ai cuong-ve-cac-he-thong-thong-tin-quan-ly
Ai cuong-ve-cac-he-thong-thong-tin-quan-lyAi cuong-ve-cac-he-thong-thong-tin-quan-ly
Ai cuong-ve-cac-he-thong-thong-tin-quan-ly
 
Tonghop wcdma
Tonghop wcdmaTonghop wcdma
Tonghop wcdma
 

Phonegap cho người mới học

  • 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