例子设计
我们一般注册都有一个,上传图像的模块,以前,用电脑注册的话,这个头像就比较麻烦了,不过,我们用手机的话就基本没这个问题了,这个例子就是,使用phonegap 调用摄像头拍下我们的头像,上传到服务器,然后,也保存到本地里面,方便加载.
原型设计:
显示用的主页
![personal_infor PhoneGap+Jquery mobile开发摄像头调用和本地数据库使用的示例]()
调用拍照的页面
为了,突显出我们用jqm的好处的,增加一个swip事件来控制,页面的切换
![3 PhoneGap+Jquery mobile开发摄像头调用和本地数据库使用的示例]()
代码编写
1,写个模板,方便,我们以后的代码的重用
05 |
<meta charset="UTF-8"> |
06 |
<!--自适应界面,如果出现,在某些设备出现界面偏小的话,检查一下有没有加入这句 --> |
07 |
<meta http-equiv="Content-type" name="viewport" |
09 |
content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no, width=device-width"> |
11 |
<link rel="stylesheet" href="jquery.mobile/jquery.mobile-1.0.1.min.css" /> |
15 |
<script type="text/javascript" charset="utf-8" src="phonegap-1.4.1.js"></script> |
16 |
<script src="jquery.mobile/jquery-1.6.4.min"></script> |
18 |
<script src="jquery.mobile/jquery.mobile-1.0.1.min.js"></script> |
21 |
<script type="text/javascript"> |
27 |
<body onload="init();"> |
28 |
<div data-role="page" id="home"> |
30 |
<div data-role="header"> |
33 |
<div data-role="content" id="content"> |
37 |
<div data-role="footer"> |
43 |
<!--import custom library --> |
44 |
<script type="text/javascript" charset="utf-8" src="apis/camera.js"></script> |
46 |
<script type="text/javascript" charset="utf-8" src="apis/device.js"></script> |
47 |
<script type="text/javascript" charset="utf-8" src="apis/storage.js"></script> |
2,模板写好了,就开始我们实际代码的编写吧.
1,首先,编写我们的device.js文件进行对应用的初始化工作
2 |
document.addEventListener("deviceready", onDeviceReady, true); |
2,然后接着写初始化用干的事情
01 |
var onDeviceReady = function() { |
02 |
console.log("deviceready event fired"); |
05 |
pictureSource=navigator.camera.PictureSourceType; |
06 |
destinationType=navigator.camera.DestinationType; |
08 |
var saveImage = kget("image"); |
11 |
var cameraImage = document.getElementById('cameraImage'); |
12 |
cameraImage.style.visibility = 'visible'; |
13 |
cameraImage.src = "data:image/jpeg;base64," + saveImage; |
17 |
document.addEventListener("searchbutton", onSearchKeyDown, false); |
18 |
document.addEventListener("menubutton", onMenuButtonDown, false); |
19 |
document.addEventListener("pause", onEventFired, false); |
20 |
document.addEventListener("resume", onEventFired, false); |
21 |
document.addEventListener("online", onEventFired, false); |
22 |
document.addEventListener("offline", onEventFired, false); |
23 |
document.addEventListener("backbutton", onEventFired, false); |
24 |
document.addEventListener("batterycritical", onEventFired, false); |
25 |
document.addEventListener("batterylow", onEventFired, false); |
26 |
document.addEventListener("batterystatus", onEventFired, false); |
27 |
document.addEventListener("startcallbutton", onEventFired, false); |
28 |
document.addEventListener("endcallbutton", onEventFired, false); |
29 |
document.addEventListener("volumedownbutton", onEventFired, false); |
30 |
document.addEventListener("volumeupbutton", onEventFired, false); |
这样我们的devices.js就简单的写完了.
3,写UI界面,这里也很简单
02 |
<div data-role="page" id="home"> |
04 |
<div data-role="header"> |
06 |
<a href="#setting" data-icon="home" id="intro" class="ui-btn-right">设置</a> |
09 |
<div data-role="content" id="homeContent"> |
11 |
<img id="cameraImage" src="" /> |
13 |
<!--这一块的动态实现你会图片的读取和存储,这个就很简单了..这里就不做介绍了..--> |
19 |
<div data-role="page" id="setting"> |
20 |
<div data-role="header"> |
24 |
<div data-role="settingContent"> |
26 |
<img id="settingImage" src="" /> |
28 |
<div class="ui-grid-a"> |
29 |
<div class="ui-block-a"><div data-role="button"id="takePhoto">take photo</div></div> |
30 |
<div class="ui-block-b"> <div data-role="button" id="upload">upload</div></div> |
36 |
<script type="text/javascript" charset="utf-8" src="apis/camera.js"></script> |
38 |
<script type="text/javascript" charset="utf-8" src="apis/device.js"></script> |
39 |
<script type="text/javascript" charset="utf-8" src="apis/storage.js"></script> |
上面就是页面的代码,就两个DIV的page,学过,jqm的朋友应该对此毫无压力了...
4,开始写点jqm的事件js,写在模板那个head,自己的那个块里面
01 |
<script type="text/javascript"> |
03 |
$('body').live("pageinit",function(){ |
07 |
$("#home").live("pageinit",function(){ |
09 |
$('#homeContent').bind("swipeleft",function(){ |
10 |
$.mobile.changePage('#setting', { transition: "fade"}); |
14 |
$('#setting').live("pageinit",function(){ |
16 |
var saveImage = kget("image"); |
19 |
var cameraImage = document.getElementById('settingImage'); |
20 |
cameraImage.style.visibility = 'visible'; |
21 |
cameraImage.src = "data:image/jpeg;base64," + saveImage; |
25 |
$('#settingContent').bind("swiperight",function(){ |
26 |
$.mobile.changePage('#home',{ transition: "fade"}); |
29 |
$('#takePhoto').bind("tap",function(){ |
这块代码的就要有一点熟悉jqm的人写好了,有啥不懂的先看一下jqm的官方文档吧...
5,写了这么久,都没怎么用到phonegap,接下来就是phonegap大展身手的时刻到了..
phonegap的照片类型
还记得我们在devices.js定义的两个变量吗?
3 |
pictureSource=navigator.camera.PictureSourceType; |
6 |
destinationType=navigator.camera.DestinationType; |
以上就是等下,可能要用到的参数介绍
新建一个camera.js,
02 |
navigator.camera.getPicture(onPhotoDataSuccess, function(ex) { |
03 |
alert("Camera Error!"); |
11 |
destinationType:destinationType.DATA_URL |
1 |
function onPhotoDataSuccess(imageData) { |
2 |
console.log("* * * onPhotoDataSuccess"); |
3 |
var cameraImage = document.getElementById('cameraImage'); |
4 |
cameraImage.style.visibility = 'visible'; |
6 |
kset("image",imageData); |
7 |
cameraImage.src = "data:image/jpeg;base64," + imageData; |
接下来,新建一个storage.js,用来简单封装storage的api
01 |
function kset(key, value){ |
02 |
console.log("key"+key+"value"+value); |
03 |
window.localStorage.setItem(key, value); |
08 |
return window.localStorage.getItem(key); |
11 |
function kremove(key){ |
12 |
window.localStorage.removeItem(key); |
16 |
window.localStorage.clear(); |
20 |
function kupdate(key,value){ |
21 |
window.localStorage.removeItem(key); |
22 |
window.localStorage.setItem(key, value); |
以上就是这次的内容了