PhoneGap+Jquery mobile開發攝像頭調用和本地數據庫使用的示例

fmms 12年前發布 | 121K 次閱讀 PhoneGap 移動開發 jQuery Mobile

例子設計

我們一般注冊都有一個,上傳圖像的模塊,以前,用電腦注冊的話,這個頭像就比較麻煩了,不過,我們用手機的話就基本沒這個問題了,這個例子就是,使用phonegap 調用攝像頭拍下我們的頭像,上傳到服務器,然后,也保存到本地里面,方便加載.

原型設計:

顯示用的主頁

PhoneGap+Jquery mobile開發攝像頭調用和本地數據庫使用的示例

調用拍照的頁面

PhoneGap+Jquery mobile開發攝像頭調用和本地數據庫使用的示例 

為了,突顯出我們用jqm的好處的,增加一個swip事件來控制,頁面的切換

PhoneGap+Jquery mobile開發攝像頭調用和本地數據庫使用的示例

代碼編寫

1,寫個模板,方便,我們以后的代碼的重用

<!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文件進行對應用的初始化工作

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

以上就是這次的內容了.

 本文由用戶 fmms 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!