It ng Coordinates Object

Một phần của tài liệu KIẾN THỨC PHONEGAP cho những bạn mới tập tành phonegap (Trang 46 - 73)

M 影 CL C

4.4.3. it 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 47

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 48 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 49 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 50

â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; }

Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 52

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 53

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 dch 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 54

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à dch 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 55

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 xongthao 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

Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 56 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 thaotá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);

// Update media position every second

setInterval(function,mi llisec,lang)hàm này có tác d ng g i l p đi l p l i 1 hàm function nào đó theo 1 chu k th i gian millisec

Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 57

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ínhtheo giâyn 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

Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 58

Ví d m u :

// Audio player //

var my_media = new Media(src, onSuccess, onError);

// Get duration var counter = 0;

var timerDur = setInterval(function() { 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 )

clearInterval(id_of_setinterval) xóa b đi s l p l i c a hàm function đ c l p b i setInterval v i var id_of_setinterval = setInterval(function,milisec)

Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 59

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(function() { media.pause(); }, 10000); }

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 :

setTimeout(code,millisec,lang)

hàm h n gi g i hàm (không th c hi n l p l i theo chu kì)

Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 60

// 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 61 5.5.5.Ph ng th c media.release

ta có th gi i phóng các ngu n audio n m bên d i h đi u hành b ng cách s d ng

ph ng th c release().đây là 1 đi u đ c bi t quan tr ng b i vì có 1 s h u h n các th c th opencore đ c dành cho trình ch y media.các th vi n OpenCore h tr phát media nh audio,video, các đnh d ng nh image.ta luôn luôn g i hàm gi i phóng này khi ta không còn c n t i 1 ngu n media.nh ví d sau :

media.release();

do v y khi x lý hoàn thành thì ta nên làm nh sau : var my_file = new Media(src, onSuccess, onError); my_file.play();

my_file.stop();

my_file.release();

5.5.6.Ph ng th c media.seekTo

dùng đ thi t l p v trí hi n t i trong ph m vi 1 audio file

media.seekTo(milliseconds);

tham sô :

milliseconds: là v trí đ c thi t l p làm v trí phát trong ph m vi audio tính b ng mili giây

hàm media.seekTo là 1 hàm không đ ng b dùng đ c p nh t v trí hi n t i c a audio file n m d i 1 đ i t ng media object.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 6.0 and higher)  iOS

 Windows Phone 7 ( Mango ) Ví d m u :

Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 62

// Audio player //

var my_media = new Media(src, onSuccess, onError); my_media.play();

// SeekTo to 10 seconds after 5 seconds setTimeout(function() {

my_media.seekTo(10000); }, 5000);

5.5.7.Ph ng th c media.startRecord

Dùng đ ghi âm l i 1 audio file :

media.startRecord(); hàm media.startRecord() là 1 hàm không đ ng b ví d m u : // Record audio // function recordAudio() { var src = "myrecording.mp3"; var mediaRec = new Media(src, // success callback function() { console.log("recordAudio():Audio Success"); }, // error callback function(err) {

console.log("recordAudio():Audio Error: "+ err.code); });

// Record audio

mediaRec.startRecord(); }

Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 63

Chú ý :

Trong BlackBerry WebWorks :

 Các thi t b blackberry ghi l i audio trong nhi u đnh d ng có ch t l ng khác nhau.các file này ph i k t thúc v i đuôi m r ng là .amr

Một phần của tài liệu KIẾN THỨC PHONEGAP cho những bạn mới tập tành phonegap (Trang 46 - 73)

Tải bản đầy đủ (PDF)

(155 trang)