暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

apachecordova教程

yBmZlQzJ 2024-01-21
230

前言

Cordova

提供了一组设备相关的

API

,通过这组

API

,移动应用能够以

JavaScript

访问原生的设备功能,如摄像头、麦克风等。

Cordova

还提供了一组统一的

JavaScript

类库,以及为这些类库所用的设备相关的原生后台代码。

Cordova

支持如下移动操作系统:

iOS, Android,ubuntu phone os, Blackberry, Windows

Phone, Palm WebOS, Bada

Symbian

适用人群

本文是

Apache Cordova

教程适合初学者学习。

学习前提

在学习本教程之前,你需要对

JavaScript

相关的知识有一定了解。

版本信息

书中演示代码基于以下版本:

标准

版本信息

Cordova

5.1.1

Node.js

0.12.7

1

创建一个

Cordova

项目

步骤

1

、确保你已经将

Node.js

的最新版本安装到你的系统上。

2

、打开终端(

Mac

)或命令窗口(

Windows

),键入以下命令来安装

Cordova CLI

npm install -g cordova

如果在

Mac

上:

sudo npm install -g cordova

如果你已经将

Cordova

安装到你的电脑上,请确保你已经将其升级到最新版本。

npm update -g cordova

3

、确定你在你的文件系统中存储项目的路径。

4

、打开

Cordova CLI

,在命名为

workshop

的目录中创建一个命名为

Workshop

Cordova

项目:

cordova create workshop com.yourname.workshop Workshop

5

、导航到项目目录:

cd workshop

6

、增加对

iOS

平台的支持(可选项)

为了能够为

iOS

平台创建项目,那么必须在你的电脑上安装

iOS

软件开发工具包。如果不需要支持

iOS

平台,那么你可以跳过这一步,并增加对其他平台的支持或只是简单地在浏览器中

运行本教程的应用。

1

确保你的系统中

iOS SDK

是可用的。

2

在命令行

确保你处在

workshop

目录

并键入

cordova platforms add ios

7

、增加对安卓平台的支持(可选项)

为了能够在安卓平台上创建项目,那么必须将安卓软件开发工具包安装到你的系统中。如果你不需要支持安卓平台,那么你可以跳过这一步,并增加对其他平台的支持或只是简单地在

浏览器中运行本教程的应用。

确保你的系统中安卓软件开发工具包和蚂蚁构建工具(

ant build tool

)是可用的。在这里,安卓软件开发工具包是可用的。在你的路径中,安卓和蚂蚁工具必须是可用的。

8

、确保你处在

workshop

目录,并添加基本插件到你的项目中:

cordova plugin add org.apache.cordova.device

cordova plugin add org.apache.cordova.console

9

、在

workshop

下测试目录结构。

www

文件夹是你将要编码你的

HTML / JavaScript

应用的位置。在一个浏览器中打开

index.html

文件,以查看由

Cordova CLI

创建的默认应用。

Platforms

文件夹是

Cordova

将要为

不同的平台(

iOS

、安卓等等)创建你的应用的位置。这个文件夹的内容将由

Cordova CLI

自动生成,而且你千万不要在该目录中进行编辑代码。

plugins

目录中安装插件。

应用参数(姓名、作者等等)都存储在

config.xml

文件中。

2

建立一个

Cordova

项目

该单元是可选的。如果你在以前的单元中就没有增加对任何平台的支持,那么你可以跳过本单元,进入第三单元。

iOS

平台创建项目

为了为你的应用程序建立一个

iOS

版本,你需要已经在你的电脑中安装了

iOS

软件开发工具包。使用以下步骤在

iOS

平台中建立项目。

在命令行,确保你处在

workshop

目录,并键入:

cordova build ios

本项目创建于

workshop / platforms / ios

文件夹。双击

Workshop.xcodeproj

Xcode

中打开项目,并在模拟器或设备上运行该项目。

你也可以在

iOS

模拟器中直接从命令行运行该应用。首先安装

ios-sim

npm install -g ios-sim

或者

sudo npm install -g ios-sim

为安卓平台创建项目

为了为你的应用程序建立一个安卓版本,你需要已经在你的电脑中安装了安卓软件开发工具包。使用以下步骤在安卓平台中建立项目。

为了在

workshop/platforms/android

文件夹创建项目,并在使用

USB

线连接到你电脑的安卓设备运行它,键入:

cordova run android

为了在

workshop/platforms/android

文件夹创建项目,并在安卓模拟器上运行它,键入:

cordova emulate android

3

设置

Workshop

文件

步骤

1

、删除你的项目的

workshop/www

文件夹内的内容。

2

、从这里下载本教程的支持文件,或者复制资源库

git clone https://github.com/ccoenraets/cordova-tutorial

3

、如果下载了压缩文件,那么把它解压到你的文件系统中的任何位置。

4

、复制

starter-www

的内容到你的项目的

workshop/www

文件夹中。

5

、构建和测试你的应用程序:

如果你已经将

Mobile

软件开发工具包安装到你的系统中,重复第

2

单元的步骤。

如果你没有安装

Mobile

软件开发工具包,那么只需简单地在你的电脑上的一个浏览器中打开

www/index.html

6

、在搜索框内键入几个字符,以通过名称搜索员工。这个时候点击一个员工连接不会产生任何结果。

4

选择一个数据存储策略

步骤一:探索不同的持久化机制

打开以下文件,并探索不同的持久性服务:

1.

www/js/services/memory/EmployeeService.js

2.

www/js/services/json/EmployeeService.js

3.

www/js/services/localstorage/EmployeeService.js

4.

www/js/services/websql/EmployeeService.js

步骤二:用不同的持久化机制测试应用程序

应用程序最初被配置为与内存数据存储一同工作。为了改变应用程序的本地持久机制:

1

、在

index.html

中:代替

js/services/memory/EmployeeService.js

,为你选择的服务输入

.js

文件;例如:

js/services/websql/EmployeeService.js

2

、测试应用程序。

为了测试

JSON

服务,确保提供的作为实体一部分的

Node.js

服务正在运行:

1

、打开终端或命令窗口,并导航到

cordova

教程的服务目录下

2

、安装依赖服务:

npm install

3

、启动服务

node server

服务工具

CORS

(跨源资源共享)支持跨站点

HTTP

检索。因此,你可以从一个加载自于其他区域或加载自于文件系统的文件调用服务。

由于

services/json/EmployeeService.js

指向

localhost

,这只有当在你的计算机上运行应用程序时才会工作,而在你的设备上运行应用程序时,它不会工作,这是因为它不把你的计算机看

作是

“localhost”

。为了使得你在你的设备上运行应用程序时

JSON

服务工作,确保你的计算机和设备是在同一子网中,识别你的计算机的

ip

地址,在

services/json/EmployeeService.js

中以

这个

ip

替换

localhost

。作为一个选择,你也可以将服务部署在公开可用的服务上。在现实生活中的应用程序中,你通常会在某种配置文件中具体化主机名称。

当在浏览器中和设备上运行应用程序时,

www/js/services

中的所有其他数据存储服务是即开即用的。

5

使用本地通知

一个默认的

JavaScript

警告显示出你的应用程序不是本地化的事实。在本章节中,我们建立基本的下部结构以实现,当应用程序在设备上运行时显示本地化的警告,并且当应用程序在

浏览器中运行时,又回到默认的

JavaScript

警告。

步骤

1

、确保你处在

workshop

目录,添加本地对话框插件到你的项目中:

cordova plugin add org.apache.cordova.dialogs

2

、在

index.html

中,添加下面的脚本标记(作为主体底部的第一个脚本标签):

<script src="cordova.js"></script>

Cordova CLI

命令用以在建立项目时向平台内注入特定的

cordova.js

版本。换句话说,

cordova.js

不需要(也不应该)显示在你的

project/www

文件夹内。

3

、当与可用的

navigator.notification

对象一同在一台设备上运行时(对话框插件已安装),重写

window.alert()

函数,并用一个对

navigator.notification.alert()

的调用替换它的默认实现。

打开

js/app.js

,并添加这些代码到

“Event Registration”

时钟:

document.addEventListener('deviceready', function () {

if (navigator.notification) { // Override default HTML alert with native dialog

window.alert = function (message) {

navigator.notification.alert(

message, // message

null, // callback

"Workshop", // title

'OK' // buttonName

);

};

}

}, false);

4

、测试应用:点击

Help

按钮。

当你在浏览器中运行应用程序时,你应该看到一个标准的浏览器警告。

当你在你的设备上运行应用程序时,你应该看到一个本地警告。

6

避免

300 ms

点击延迟

步骤

1

、在你的

iOS

设备或

iOS

模拟器上测试该应用程序:点击

Help

按钮,并留意弹出对话框之前的延迟。

这个延迟的发生时由于操作系统要大约等待

300 ms

以确认用户是否要再次点击目标(并因此执行一个双击事件)。

2

、在

index.html

中,添加以下脚本标记:

<script src="lib/fastclick.js"></script>

FastClick

是由金融时报创建的开源库。更多信息请点击这里。

3

、在

app.js

中,在

deviceready

事件处理器中注册

FastClick

FastClick.attach(document.body);

4

、测试应用程序:点击

Help

按钮。现在对话框会没有延迟地出现。

7

设置单页应用程序

单页应用程序

是一个网页应用程序,存在于单个

HTML

页面中。根据用户使用该应用程序的导航需要,已在应用程序中增加

“views”

,并从

DOM

中移除。一个单页应用程序的布局是

尤其适合于移动应用程序的:

没有刷新页面提供了一个更流畅和更接近于本地化的体验。

用户界面是完全在客户端创建的,而不依赖于服务器创建用户界面,使其成为脱机工作应用程序的理想架构。

在本单元中,我们设置基本的下部构造将员工目录转为单页应用程序。

步骤

1

、在

index.html

中:在主体标签内删除

HTML

标记(伴随有脚本标签异常)。

2

、将立即执行函数添加到

app.js

内,定义一个命名为

renderHomeView()

的函数(刚好在

findByName

函数之后)。执行函数以编程方式增加

Home View

标记到主体元素。

function renderHomeView() {

var html =

"<h1>Directory</h1>" +

"<input class='search-key' type='search' placeholder='Enter name'/>" +

"<ul class='employee-list'></ul>";

$('body').html(html);

$('.search-key').on('keyup', findByName);

}

3

、修改数据服务的初始化逻辑:当服务已经成功地初始化后,调用

renderHomeView()

函数以程序化显示

Home View

var service = new EmployeeService();

service.initialize().done(function () {

renderHomeView();

});

4

、由于你已经移动注册的

KeyUp

事件到

renderHomeView()

函数中,确保你在事件注册(

Event Registration

)部分移除原来的事件注册。

5

、由于

Help

按钮已不在该位置,对

Help

按钮移除点击事件处理器(在

10:27

注册部分)。

6

、测试应用程序。

确保你没有忽略上述第

4

和第

5

步,否则你可能运行到难以跟踪的问题,这与本教程中后续讲解的事件触发两次有关。

8

使用

Handlebars

模板

JavaScript

中编写

HTML

片段和以编程方式将它们插入到

DOM

是令人乏味的。它使你的应用程序更难写,更难以维护。

HTML

模板通过从你的代码中断开用户界面定义(

HTML

标记)

解决了这一问题。这里有很多不错的

HTML

模板解决方案,包括

Mustache.js

Handlebars.js

Underscore.js

等等一系列例子。

在本单元中,我们创建了两个模板用以简化员工目录应用程序的代码。我们使用

Handlebars.js

,但是可以与使用其他

HTML

模板解决方案实现同样的结果。

步骤

1

:定义模板

根据如下步骤修改

index.html

1

、增加一个脚本标签以包含

handlebars.js

库:

<script src="lib/handlebars.js"></script>

2

、增加

ratchet.css

styles.css

index.html

的头部

Ratchet

是一个简单的

CSS

工具包,可以为移动应用程序提供样式。

<link href="assets/ratchet/css/ratchet.css" rel="stylesheet">

<link href="assets/css/styles.css" rel="stylesheet">

3

、创建一个

HTML

模板以渲染

Home View

。在主体标签的第一子标签增加本脚本标签:

script id="home-tpl" type="text/template">

<header class="bar bar-nav">

<h1 class="title">Directory</h1>

</header>

<div class="bar bar-standard bar-header-secondary">

<input class='search-key' type="search"/>

</div>

<div class="content"></div>

</script>

4

、创建一个

HTML

模板以渲染员工列表。在上一个之后立即增加本脚本标签:

script id="employee-list-tpl" type="text/template">

<ul class="table-view">

{{#each this}}

<li class="table-view-cell media">

<a href="#employees/{{ id }}">

<img class="media-object pull-left" src="assets/pics/{{pic}}">

<div class="media-body">

{{firstName}} {{lastName}}

<p>{{title}}</p>

</div>

</a>

</li>

{{/each}}

</ul>

</script>

步骤

2

:使用模板

app.js

中修改即用函数如下:

1

、在

service

变量声明以前,立即声明两个变量,这两个变量持有上述定义模板的编译版本:

var homeTpl = Handlebars.compile($("#home-tpl").html());

var employeeListTpl = Handlebars.compile($("#employee-list-tpl").html());

2

、修改

renderHomeView()

函数以使用

homeTpl

模板代替内联

HTML

function renderHomeView() {

$('body').html(homeTpl());

$('.search-key').on('keyup', findByName);

}

3

、修改

findByName()

函数以使用

employeeListTpl

模板代替内联

HTML

function findByName() {

service.findByName($('.search-key').val()).done(function (employees) {

$('.content').html(employeeListTpl(employees));

});

}

4

、测试应用程序。

步骤

3

:解决

iOS7

的状态栏问题

iOS7

中,状态栏与应用程序视图重叠。结果是,状态栏文本可能与应用程序的标题文本冲突,如上截图所示。你可以使用状态栏插件解决这个问题。

1

、增加状态栏插件:

cordova plugins add org.apache.cordova.statusbar

2

、在

app.js

中,在

deviceready

处理器的顶部增加以下代码:

StatusBar.overlaysWebView( false );

StatusBar.backgroundColorByHexString('#ffffff');

StatusBar.styleDefault();

3

、再次建立应用程序,并在

iOS

模拟器或者

iOS

设备上测试你的应用程序。

9

创建视图

是时候提供带有一些结构的应用程序了。如果我们继续将应用程序的所有核心功能添加到引导应用程序的即时函数,那么它将很快变得难以控制。在本部分,我们创建一个

HomeView

对象,其封装逻辑以创建和渲染

Home

视图。

步骤

1

:创建

Home View

1

、在

js

目录创建一个命名为

HomeView.js

的文件,并定义一个

HomeView

构造函数执行如下:

var HomeView = function (service) { }

构造函数将雇员数据服务作为一个参数

2

HomeView

使用一个嵌套视图来显示员工列表。定义员工的列表作为单独视图,使它在其他情况下可重复使用。我们将在下面的步骤

2

定义

EmployeeListView

。现在,顶一个本地变

量以继续跟踪嵌套视图。

var HomeView = function (service) { var employeeListView; }

3

、在

HomeView

构造函数内定义一个

initialize()

函数。

为视图定义一个

div

封装。该

div

封装用于附加视图相关事件。

实例化嵌套视图(你将在步骤

2

定义

EmployeeListView

.

最后,在

HomeView

构造函数中调用

initialize()

函数。

var HomeView = function (service) {

 

var employeeListView;

 

this.initialize = function () {

// Define a div wrapper for the view (used to attach events)

this.$el = $('<div/>');

this.$el.on('keyup', '.search-key', this.findByName);

employeeListView = new EmployeeListView();

this.render();

};

 

this.initialize();

 

}

4

、从

app.js

移动

renderHomeView()

函数到

HomeView

类。为了保持视图的可重用性,附加

HTML

div

封装(

this.el

)代替文档主体。现在由于该函数被封装在

HomeView

中,你也可以从

renderHomeView()

render()

重新命名它。

this.render = function() {

this.$el.html(this.template());

$('.content', this.$el).html(employeeListView.$el);

return this;

};

5

、从

app.js

移动

findByName()

函数到

HomeView

,并将调整其与嵌套视图一同工作。

this.findByName = function() {

service.findByName($('.search-key').val()).done(function(employees) {

employeeListView.setEmployees(employees);

});

};

步骤

2

:创建

EmployeeList

视图

1

、在

js

目录创建一个命名为

EnployeeListView.js

的文件。

2

、执行

EmployeeListView

如下:

var EmployeeListView = function () {

 

var employees;

 

this.initialize = function() {

this.$el = $('<div/>');

this.render();

};

 

this.setEmployees = function(list) {

employees = list;

this.render();

}

 

this.render = function() {

this.$el.html(this.template(employees));

return this;

};

 

this.initialize();

 

}

步骤

3

:使用

Home View

1

、在

index.html

中,增加脚本标签以包含

EmployeeListView.js

HomeView.js

(仅在

app.js

的脚本标签之前):

<script src="js/EmployeeListView.js"></script>

<script src="js/HomeView.js"></script>

2

、在

app.js

中,移除

renderHomeView()

函数。

3

、移除

findByName()

函数。

4

、修改模板初始化。不是将它们声明为局部变量,而是增加它们到它们各自类的原型:

HomeView.prototype.template = Handlebars.compile($("#home-tpl").html());

EmployeeListView.prototype.template =

Handlebars.compile($("#employee-list-tpl").html());

5

、当服务已经成功初始化后,修改服务初始化逻辑以显示

Home View

。将服务传递给主视图构造函数。

service.initialize().done(function () {

$('body').html(new HomeView(service).render().$el);

});

6

、测试应用程序。

10

执行视图路由

在本部分中,我们增加一个员工细节视图。由于现在该应用程序有一个以上的视图,我们也增加一个简单的视图路由机制。

步骤

1

:创建员工模板。

打开

index.html

,并添加一个模板,以提供详细的员工视图:

<script id="employee-tpl" type="text/template">

<header class="bar bar-nav">

<a class="btn btn-link btn-nav pull-left" href="#">

<span class="icon icon-left-nav"></span>

</a>

<h1 class="title">Employee</h1>

</header>

<div class="content">

<div class="card">

<ul class="table-view">

<li class="table-view-cell media">

<img class="media-object pull-left emp-pic" src="assets/pics/{{pic}}">

<div class="media-body">

{{ firstName }} {{ lastName }}

<p>{{ title }}</p>

</div>

</li>

<li class="table-view-cell media">

<a href="tel:{{ officePhone }}" class="push-right">

<span class="media-object pull-left icon icon-call"></span>

<div class="media-body">

Call Office

<p>{{ officePhone }}</p>

</div>

</a>

</li>

<li class="table-view-cell media">

<a href="tel:{{ cellPhone }}" class="push-right">

<span class="media-object pull-left icon icon-call"></span>

<div class="media-body">

Call Cell

<p>{{ cellPhone }}</p>

</div>

</a>

</li>

<li class="table-view-cell media">

<a href="sms:{{ cellPhone }}" class="push-right">

<span class="media-object pull-left icon icon-sms"></span>

<div class="media-body">

SMS

<p>{{ cellPhone }}</p>

</div>

</a>

</li>

<li class="table-view-cell media">

<a href="mailto:{{ email }}" class="push-right">

<span class="media-object pull-left icon icon-mail"></span>

<div class="media-body">

Email

<p>{{ email }}</p>

</div>

</a>

</li>

 

</ul>

</div>

</div>

</script>

步骤

2

:创建

EmployeeView

1

、在

js

目录创建一个命名为

EmployeeView.js

的文件,并定义它如下:

var EmployeeView = function(employee) {

 

this.initialize = function() {

this.$el = $('<div/>');

};

 

this.render = function() {

this.$el.html(this.template(employee));

return this;

};

 

this.initialize();

 

}

2

、在

index.html

中,增加一个脚本标签以包含

EmployeeView.js

(仅在

app.js

的脚本标签之前)。

<script src="js/EmployeeView.js"></script>

步骤

3

:执行视图路由

1

、在

index.html

中,增加一个脚本标签以包含

router.js

(仅在

jquery.js

的脚本标签之前)。

<script src="lib/router.js"></script>

2

、打开

app.js

。增加编译的员工模板到

EmployeeView

的原型:

EmployeeView.prototype.template = Handlebars.compile($("#employee-tpl").html());

3

、在应用程序中定义两个使用的路由:

service.initialize().done(function () {

router.addRoute('', function() {

$('body').html(new HomeView(service).render().$el);

});

 

router.addRoute('employees/:id', function(id) {

service.findById(parseInt(id)).done(function(employee) {

$('body').html(new EmployeeView(employee).render().$el);

});

});

 

router.start();

});

4

、测试应用程序。

11

使用硬件加速

在本单元中,当用户在列表和细节视图之间导航时,你添加硬件加速页转换。

步骤

修改

index.html

如下:

1

、在

index.html

中增加

pageslider.css

到顶部标签之中:

<link href="assets/css/pageslider.css" rel="stylesheet">

2

、增加一个脚本标签以包含

pageslider.js

库(在

jquery.js

之后):

<script src="lib/pageslider.js"></script>

这里

PageSlider

GitHub

I

主机的微型库。

修改

app.js

如下:

1

、在

Local Variables

部分,声明

PageSlider

对象的一个实例如下:

var slider = new PageSlider($('body'));

2

、在路由中,用对

slider.slidePage()

的调用替代对

$('body').html()

的调用,传递相同的参数到函数。

slider.slidePage(new HomeView(service).render().$el);

slider.slidePage(new EmployeeView(employee).render().$el);

12

使用本地

API

在本部分中,我增加了给员工添加他

/

她的位置信息标签的能力。在本示例应用程序中,我们在一个警告中显示原始信息(经度

/

纬度)。在现实生活中的应用程序中,我们通常在数据

库中保存位置信息作为员工信息的一部分,并在一张图上显示。

当将应用程序作为一个

Cordova

应用程序在你的设备上运行时,下面的这些代码就会工作。当页面是由

http://

协议服务时,这些代码也会在桌面系统中的

Chrome

上工作,并且在

Firefox

中,忽视该协议(

http://

file://

)。

步骤

1

、增加

geolocaton

插件到你的项目中:

cordova plugin add org.apache.cordova.geolocation

2

、在

index.html

中,增加以下列表项到

employee-tpl

模板:

<li class="table-view-cell media">

<a hre="#" class="push-right add-location-btn">

<span class="media-object pull-left"></span>

<div class="media-body">

Add location

</div>

</a>

</li>

3

、在

EmployeeView

initialize()

函数中,为

Add Location

列表项的单击事件注册一个事件侦听器。

this.$el.on('click', '.add-location-btn', this.addLocation);

确保你增加的这一行是作为

initialize()

函数的最后一行(在

this.$el

被分配以后)。

4

、在

EmployeeView

中,定义

addLocation

事件处理程序如下:

this.addLocation = function(event) {

event.preventDefault();

navigator.geolocation.getCurrentPosition(

function(position) {

alert(position.coords.latitude + ',' + position.coords.longitude);

},

function() {

alert('Error getting location');

});

return false;

};

5

、测试应用程序。

13

使用联系人

API

在本部分中,你使用

Cordova

联系人

API

提供给用户能够添加一个员工到设备联系人列表的能力。

当在你的设备上作为一个

Cordova

应用程序运行该应用程序时,下面的代码才工作。换句话说,你不能在你电脑上的浏览器中测试它。

1

、添加联系人插件到你的项目中。

cordova plugin add org.apache.cordova.contacts

2

、在

index.html

中,添加以下列表项到员工模板:

<li class="table-view-cell media">

<a hre="#" class="push-right add-contact-btn">

<span class="media-object pull-left"></span>

<div class="media-body">

Add to contacts

</div>

</a>

</li>

3

、在

EmployeeView

initialize()

函数中,为

Add to Contacts

列表项的单击事件注册一个事件侦听器。

this.$el.on('click', '.add-contact-btn', this.addToContacts);

4

、在

EmployeeView

中,定义

addToContacts

事件处理程序如下:

this.addToContacts = function(event) {

event.preventDefault();

console.log('addToContacts');

if (!navigator.contacts) {

alert("Contacts API not supported", "Error");

return;

}

var contact = navigator.contacts.create();

contact.name = {givenName: employee.firstName, familyName: employee.lastName};

var phoneNumbers = [];

phoneNumbers[0] = new ContactField('work', employee.officePhone, false);

phoneNumbers[1] = new ContactField('mobile', employee.cellPhone, true);

contact.phoneNumbers = phoneNumbers;

contact.save();

return false;

};

14

使用照相机

API

在本部分中,你使用

Cordova

照相机

API

提供给用户能够采集员工照片的能力,并将该图片用作应用程序中的员工图片。我们没有在这个示例应用程序存留这样的照片。

当在你的设备上作为一个

Cordova

应用程序运行该应用程序时,下面的代码才工作。换句话说,你不能在你电脑上的浏览器中测试它。

1

、添加照相机插件到你的项目中:

cordova plugin add org.apache.cordova.camera

2

、在

index.html

中,添加以下列表项到员工模板:

<li class="table-view-cell media">

<a hre="#" class="push-right change-pic-btn">

<span class="media-object pull-left"></span>

<div class="media-body">

Change Picture

</div>

</a>

</li>

3

、在

EmployeeView

initialize()

函数中,为

Change Picture

列表项的单击事件注册一个事件侦听器。

this.$el.on('click', '.change-pic-btn', this.changePicture);

4

、在

EmployeeView

中,定义

changePicture

事件处理程序如下:

this.changePicture = function(event) {

event.preventDefault();

if (!navigator.camera) {

alert("Camera API not supported", "Error");

return;

}

var options = { quality: 50,

destinationType: Camera.DestinationType.DATA_URL,

sourceType: 1, // 0:Photo Library, 1=Camera, 2=Saved Album

encodingType: 0 // 0=JPG 1=PNG

};

 

navigator.camera.getPicture(

function(imgData) {

$('.media-object', this.$el).attr('src', "data:image/jpeg;base64,"+imgData);

},

function() {

alert('Error taking picture', 'Error');

},

options);

 

return false;

};

5

、测试应用

更多信息请访问

http://wiki.jikexueyuan.com/project/apache-cordova-tutorial/

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论