上一章中,咱們討論了環境的配置,這本章中咱們,寫一個小模塊來貫通學習,phonegap對攝像頭的調用,已經phonegap對於拍下來的照片的處理,已經,使用本地數據庫保存咱們的數據,讓在程序從新運行的時候可以保留咱們的結果.先說明一下,爲了,減小工做量,不少地方因爲,官方文檔已經很詳細了我就可貴在描述了,若是有些地方,沒有而官方文檔也沒有的話,能夠來問我...javascript
咱們通常註冊都有一個,上傳圖像的模塊,之前,用電腦註冊的話,這個頭像就比較麻煩了,不過,咱們用手機的話就基本沒這個問題了,這個例子就是,使用phonegap 調用攝像頭拍下咱們的頭像,上傳到服務器,而後,也保存到本地裏面,方便加載.css
原型設計:html
顯示用的主頁java
調用拍照的頁面jquery
爲了,突顯出咱們用jqm的好處的,增長一個swip事件來控制,頁面的切換android
1,寫個模板,方便,咱們之後的代碼的重用web
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <!--自適應界面,若是出現,在某些設備出現界面偏小的話,檢查一下有沒有加入這句 --> <meta http-equiv="Content-type" name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no, width=device-width"> <!--樣式--> <link rel="stylesheet" href="jquery.mobile/jquery.mobile-1.0.1.min.css" /> <!--end--> <!--導入的js框架--> <script type="text/javascript" charset="utf-8" src="phonegap-1.4.1.js"></script> <script src="jquery.mobile/jquery-1.6.4.min"></script> <script src="jquery.mobile/jquery.mobile-1.0.1.min.js"></script> <!--end--> <!--本身寫的js--> <script type="text/javascript"> </script> <!--end--> </head> <body onload="init();"> <div data-role="page" id="home"> <div data-role="header"> <h1>Hello,World</h1> </div> <div data-role="content" id="content"> <h1>content</h1> </div> <div data-role="footer"> <h1>footer</h1> </div> </div> <!--import custom library --> <script type="text/javascript" charset="utf-8" src="apis/camera.js"></script> <script type="text/javascript" charset="utf-8" src="apis/device.js"></script> <script type="text/javascript" charset="utf-8" src="apis/storage.js"></script> <!--end--> </body> </html>
2,模板寫好了,就開始咱們實際代碼的編寫吧.數據庫
1,首先,編寫咱們的device.js文件進行對應用的初始化工做api
function init() { document.addEventListener("deviceready", onDeviceReady, true); }
2,而後接着寫初始化用乾的事情服務器
var onDeviceReady = function() { console.log("deviceready event fired"); // api-camera Photo URI pictureSource=navigator.camera.PictureSourceType; destinationType=navigator.camera.DestinationType; //這裏是初始化主頁,若是,已經有頭像的話,就加載 var saveImage = kget("image"); if(saveImage){ //console.log("have image"+saveImage); var cameraImage = document.getElementById('cameraImage'); cameraImage.style.visibility = 'visible'; cameraImage.src = "data:image/jpeg;base64," + saveImage; } //系統的事件,按需求實現本身的回調方法,這裏就默認了.. document.addEventListener("searchbutton", onSearchKeyDown, false); document.addEventListener("menubutton", onMenuButtonDown, false); document.addEventListener("pause", onEventFired, false); document.addEventListener("resume", onEventFired, false); document.addEventListener("online", onEventFired, false); document.addEventListener("offline", onEventFired, false); document.addEventListener("backbutton", onEventFired, false); document.addEventListener("batterycritical", onEventFired, false); document.addEventListener("batterylow", onEventFired, false); document.addEventListener("batterystatus", onEventFired, false); document.addEventListener("startcallbutton", onEventFired, false); document.addEventListener("endcallbutton", onEventFired, false); document.addEventListener("volumedownbutton", onEventFired, false); document.addEventListener("volumeupbutton", onEventFired, false); };
這樣咱們的devices.js就簡單的寫完了.
3,寫UI界面,這裏也很簡單
<body> <div data-role="page" id="home"> <div data-role="header"> <h1>我的信息</h1> <a href="#setting" data-icon="home" id="intro" class="ui-btn-right">設置</a> </div> <div data-role="content" id="homeContent"> <p>頭像</p> <img id="cameraImage" src="" /> <!--這一塊的動態實現你會圖片的讀取和存儲,這個就很簡單了..這裏就不作介紹了..--> <p>名字:阿柴</p> <p>聯繫方式:xxxxx</p> </div> </div> <div data-role="page" id="setting"> <div data-role="header"> <h1>頭像設置</h1> </div> <div data-role="settingContent"> <p>頭像</p> <img id="settingImage" src="" /> <div class="ui-grid-a"> <div class="ui-block-a"><div data-role="button" id="takePhoto">take photo</div></div> <div class="ui-block-b"> <div data-role="button" id="upload">upload</div></div> </div> </div> </div> <script type="text/javascript" charset="utf-8" src="apis/camera.js"></script> <script type="text/javascript" charset="utf-8" src="apis/device.js"></script> <script type="text/javascript" charset="utf-8" src="apis/storage.js"></script> </body>
上面就是頁面的代碼,就兩個DIV的page,學過,jqm的朋友應該對此毫無壓力了...
4,開始寫點jqm的事件js,寫在模板那個head,本身的那個塊裏面
<script type="text/javascript"> //在頁面初始化的時候,利用phonegap初始化咱們的應用 $('body').live("pageinit",function(){ init(); }); //爲頁面添加swip 事件 $("#home").live("pageinit",function(){ //當咱們向左滑動的時候,進入setting頁面 $('#homeContent').bind("swipeleft",function(){ $.mobile.changePage('#setting', { transition: "fade"}); }); }); $('#setting').live("pageinit",function(){ //顯示頭像圖片 var saveImage = kget("image"); if(saveImage){ //console.log("have image"+saveImage); var cameraImage = document.getElementById('settingImage'); cameraImage.style.visibility = 'visible'; cameraImage.src = "data:image/jpeg;base64," + saveImage; } //當咱們向右滑動的時候,回到主頁 $('#settingContent').bind("swiperight",function(){ $.mobile.changePage('#home',{ transition: "fade"}); }); //進行拍照 $('#takePhoto').bind("tap",function(){ take_pic(); }); }); </script>
這塊代碼的就要有一點熟悉jqm的人寫好了,有啥不懂的先看一下jqm的官方文檔吧...
5,寫了這麼久,都沒怎麼用到phonegap,接下來就是phonegap大展身手的時刻到了..
phonegap的照片類型
還記得咱們在devices.js定義的兩個變量嗎?
//這個是設置圖片是調用攝像頭仍是,本機相冊,默認是調用攝像頭 //更多參見官方文檔 pictureSource=navigator.camera.PictureSourceType; //這個是,當phonegap 獲取圖片的時候,咱們但願獲取的是路徑?仍是 //給予base64編碼的圖像格式 destinationType=navigator.camera.DestinationType;以上就是等下,可能要用到的參數介紹
新建一個camera.js,
function take_pic() { navigator.camera.getPicture(onPhotoDataSuccess, function(ex) { alert("Camera Error!"); }, { //這裏的更多設置參數參見官方文檔 quality : 50, targetWidth: 320, targetHeight: 240, //用data_url,而不用file_url的緣由是,file_url在不一樣平臺有差別 //很差編寫,而用data_url就能夠不考慮這個,加上,拍張圖片,不要太好的話,就幾十k存到數據庫裏面也沒多慢.. destinationType:destinationType.DATA_URL }); }
function onPhotoDataSuccess(imageData) { console.log("* * * onPhotoDataSuccess"); var cameraImage = document.getElementById('cameraImage'); cameraImage.style.visibility = 'visible'; //把圖片存進數據庫裏面 kset("image",imageData); cameraImage.src = "data:image/jpeg;base64," + imageData; }
接下來,新建一個storage.js,用來簡單封裝storage的api
function kset(key, value){ console.log("key"+key+"value"+value); window.localStorage.setItem(key, value); } function kget(key){ console.log(key); return window.localStorage.getItem(key); } function kremove(key){ window.localStorage.removeItem(key); } function kclear(){ window.localStorage.clear(); } //測試更新方法 function kupdate(key,value){ window.localStorage.removeItem(key); window.localStorage.setItem(key, value); }以上就是此次的內容了.
研究了一個星期的phonegap,因爲在家,沒學校那麼方即可以找同窗借iphone來測試應用,說下phonegap在android的體驗吧,在我手頭上一臺能在象限跑分到2000的設備,運行這個,與Java寫的應用相同的顯示,要慢不少....以目前,android 2000分以上的設備而言,我以爲還不是主流,因此,這個phonegap的應用目前而言,用來開發Iphone程序以爲還能夠,Iphone的webview性能還算能夠吧...
接下來,說下此次的例子,這個例子裏面有個比較嚴重的拖慢性能的地方,有興趣的能夠在swipe幾回之後用backbutton來猜一下,代碼的話晚些時候我整理出來在發佈吧...
下一次,估計得好久才更新這個系列了,有空的話,我專門搞個視頻,來跟你們演示一下...phonegap目前而言,作android的web native app的性能問題吧....