cordova plugin add-plugin-device 判断是不是android

一、插件相关常用命令&1、查看所有已经安装的插件&&& cordova plugin ls &2、安装插件(以camera插件为例)&&& cordova plugin add cordova-plugin-camera &3、删除插件(以camera插件为例)&&& cordova plugin rm cordova-plugin-camera &4、更新插件&&& cordova plugin update 二、常用的Cordova插件&1、Console(调试控制台)&&& 让程序可以在控制台中打印输出日志。&&& cordova plugin add cordova-plugin-console &2、Connection(网络连接) 用来判断网络连接类型(2G、3G、4G、Wifi、无连接等)&&& cordova plugin add cordova-plugin-network-information &3、Device(设备) 获取一些设备信息。&4、Hardware Nofifications(硬件消息提醒) 让设备蜂鸣或振动。&&& cordova plugin add cordova-plugin-vibration &5、Visual Notification(可视化消息提醒) 不同于js的alert()、confirm()和prompt()方法是同步的。Cordova的alert()、confirm()和prompt()方法是异步的,并且对显示内容有更大的控制权限。&&& cordova plugin add cordova-plugin-dialogs &6、Battery(电池) 可以获取电池状态信息。&&& cordova plugin add cordova-plugin-battery-status &7、Accelerometer(加速计) 让应用在三维空间(使用笛卡尔三维坐标系统)中决定设备方向。&&& cordova plugin add cordova-plugin-device-motion &8、Compass(指南针) 可以让开发者读取移动设备的朝向。&&& cordova plugin add cordova-plugin-device-orientation &9、Geolocation(地理定位) 让应用判断设备的物理位置。&&& cordova plugin add cordova-plugin-geolocation 10、Camera(相机) 用相机获取图像。&&& cordova plugin add cordova-plugin-camera 11、Media Capture (媒体捕获) 与Camera API相比,不仅能获取图像,还可以录视频或者录音。&&& cordova plugin add cordova-plugin-media-capture 12、Globalization(全球化) 允许应用查询操作系统的当前设置,判断用户使用的语言。&&& cordova plugin add cordova-plugin-globalization 13、Contacts(联系人) 读取联系人列表并在应用中使用联系人数据,或使用应用数据向联系人列表中写新的联系人。&&& cordova plugin add cordova-plugin-contacts 14、Media(播放/记录媒体文件) 让应用能记录或播放媒体文件。用它可以在手机后台播放音频文件或玩桌面视频游戏。&&& cordova plugin add cordova-plugin-media 15、InAppBrowser(内置浏览器) 允许在在单独的窗口中加载网页。例如要向应用用户展示其他网页。当然可以很容易地在应用中加载网页内容并管理,但有时候需要不同的用户体验,InAppBrowser加载网页内容,应用用户可以更方便的直接返回到主应用。&&& cordova plugin add cordova-plugin-inappbrowser 16、Splashscreen(闪屏) 用来在Cordova应用启动时显示自定义的闪屏。&&& cordova plugin add cordova-plugin-splashscreen 17、exitApp(退出应用) 让 Android 或者 Windows Phone 8 上的APP关闭退出(iOS系统不支持)。&&& cordova plugin add cordova-plugin-exitapp 18、barcodeScanner(条形码/二维码扫描) 不仅可以通过摄像头识别二维码/条形码,还能生成二维码。&&& cordova plugin add cordova-plugin-barcodescanner 19、file(文件访问操作类) 提供对设备上的文件进行读取和写入的功能支持。&&& cordova plugin add cordova-plugin-file 20、fileTransfer(文件传输) 实现文件上传、下载及共享等功能。&&& cordova plugin add cordova-plugin-file-transfer
阅读(...) 评论()标签:至少1个,最多5个
到目前为止我们已经了解了如何搭建Cordova开发环境及如何使用Cordova和移动平台开发商提供的工具。以后的部分将讨论更多的关于Cordova编程方面的内容。这里介绍Cordova APIs,及在应用中如何使用。
本文承接上篇《使用PhoneGap Build》。
对API本身不会太深入,关于这些内容请参考官方API文档,主要演示如何在应用中使用。
Cordova核心API
Hybrid应用比web应用强大之处在于可以使运行在容器中的web内容访问native APIs。Cordova提供了用于移动设备上的API的子集,包括:
加速度计(Accelerometer)
相机(Camera)
录制(Capture)
指南针(Compass)
网络连接(Connection)
联系人(Contacts)
设备(Device)
事件(Events)
文件(File)
地理定位(Geolocation)
全球化(Globalization)
内置浏览器(InAppBrowser)
多媒体(Media)
消息提醒(Notification)
闪屏(Splashscreen)
存储(Storage)
某些情景中,API模仿已经由现代浏览器提供的能力;大多数情况下,应用使用内嵌在Cordova容器中的native浏览器、webView提供的API。对于没有在浏览器上实现提供API的平台,Cordova开发团队会实现这个API,这样在所有支持的平台上都可以使用了。可以看看Cordova地理定位(Geolocation)、文件(File)或存储(Storage)API。它们在大多数平台上的实现都很标准,实现时不用做太多处理。
而文件和存储的API已经成为移动浏览器的标准,Geolocation也是这种情况,但是之后会谈到的"硬件API"部分涉及到的API和它类似,所以也会谈到些。Contacts API也是基于这种标准的,但是因为比较特殊需要说明一下。
之前提到过所有的核心API在3.0版本之后都从Cordova容器中移除并以插件的形式实现。因此需要在项目中使用如下命令关联插件:
cordova plugin add path_to_plugin
例如要使用Camera API,使用如下命令添加相机功能:
cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-camera.git
这样就把相机插件从公共Git资源库下载下来了,如果插件位于本地,比如"d:\cordova\"下,path_to_plugin替换成本地存储路径。
cordova plugin add d:\cordova\cordova-plugin-camera
更多这方面的内容请参考《使用Cordova命令行》。
使用API的Cordova文档
因为有开发团队一直在维护Cordova容器、API和插件,并且有专门的团队在努力维护文档,所以它的的API文档写的很好,在构建Cordova应用时值得花些时间阅读。在线文档地址在www.cordova.io,文档链接在页面的下面,链接指向适当的语言和最近发布的框架版本。文档页面右上方有下拉列表可以选择不同的版本。
使用API开发时,要注意在文档中说明的每个API特别之处。虽然Cordova开发团队尽力在跨平台上保存API的一致性,在一些平台上实现的某些功能是不可用的,或者并不是要实现的状态。碰到使用Cordova API不尽如人意的地方可以去文档中检查一下API的特别说明。
设置应用许可
大多数Cordova API使用navtive API,许多都有安全限制。出于保护用户和设备考虑,开发者在部署到设备上时要设置应用配置。这些设置配置了native应用容器,由它在安装时通知操作系统使用了有某些限制的API。这样操作系统在安装时会弹出是否允许应用的API。
如下图是在安装HelloCordova应用时出现的提示:
如果某个API或功能在平台上不可用,或者被用户禁用了,使用它的应用在执行这部分时会失败且不会给出提示。设想一下这种情况应用会抛出某种异常,但是因为没有处理的case,因此在执行时会跳过执行这个API。如果在实现某个功能并且只是不工作而不给出任何提示时,检查一下应用权限设置。
要了解应用中使用的API需要什么样的配置设置,要参考具体的API的文档。下图是一个Camera API文档页面,其中包括叫"Accessing the Feature"的部分,描述了怎样向项目中添加API和在应用中使用API时要做怎样的配置设备。
如上图说明了在每个支持的平台上需要更新的配置文件,以及启用功能时文件中要添加的内容。配置文件通常是config.xml文件,平台不同位置不同。
幸好Cordova CLI可以为我们管理设置应用权限。如果用CLI添加插件,它会在config.xml中为项目中所有平台作了一些配置改动。如下面的配置文件所示(添加camera再粘一遍):
&?xml version='1.0' encoding='utf-8'?&
&widget id="io.cordova.hellocordova" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0"&
&name&HelloCordova&/name&
&description&
A sample Apache Cordova application that responds to the deviceready event.
&/description&
&author email="dev@cordova.apache.org" href="http://cordova.io"&
Apache Cordova Team
&content src="index.html" /&
&plugin name="cordova-plugin-whitelist" version="1" /&
&access origin="*" /&
&allow-intent href="http://*/*" /&
&allow-intent href="https://*/*" /&
&allow-intent href="tel:*" /&
&allow-intent href="sms:*" /&
&allow-intent href="mailto:*" /&
&allow-intent href="geo:*" /&
&platform name="android"&
&allow-intent href="market:*" /&
&/platform&
&platform name="ios"&
&allow-intent href="itms:*" /&
&allow-intent href="itms-apps:*" /&
&/platform&
到这里讨论了所有背景知识,开始讨论API。
Cordova对象
一些Cordova API并不是必要的,然而它们对于Cordova应用也是有用的对象。比如connection和device,下面对它们做下介绍并且在说明如何在应用中使用。
Connection类型
移动应用时常需要知道可用网络连接的类型。因为网络服务商在对超出的数据流量要收取费用,应用在进行数据量大的升级时建议使用收费低的Wifi而不要使用蜂窝移动网络。最佳实践是开发者对应用使用的数据使用类型做出分类,以便在写代码时使用数据流量费用最少。对于这种情况Cordova提供了connection对象用来识别当前可用的网络连接。使用前首先添加插件:
cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-network-information.git
在代码适当的位置,通过以下js代码确定连接类型:
var ct = navigator.connection.
接下来可以把ct的值和预定义的连接类型属性的做值对比:
Connection.CELL
Connection.CELL_2G
Connection.CELL_3G
Connection.CELL_4G
Connection.ETHERNET
Connection.NONE
Connection.UNKOWN
Connection.WIFI
应用使用网络前要确定是否有网络连接,可以这么写:
ct = navigator.connection.
if (ct != Connection.None) {
console.log("You have a connection");
// 使用网络的代码
// 警告用户没有网络连接无法进行
应用在每次要知道网络的状态是要查询connection对象,前面的ct变量在网络状态变化时不会继续维持一个有效状态值。之后会涉及到相关事件可以看到如何监视网络连接。
或者要检查某个网络类型,可以这么写:
ct = navigator.connection.
if (ct == Connection.WIFI) {
console.log("You have a WIFI Connection");
// 使用WIFI的的代码功能
// 警告用户没有WIFI无法继续
应用可以使用online和offline事件监视网络的实时状态(稍后介绍)。
device对象可以用来确定设备的有限数量的信息。可用的设备属性如下:
device.name
device.cordova
device.platform
device.uuid
device.verson
device.model
使用前安装device插件,在《Cordova应用解析中》对它有描述。
开发者经常要通知用户一些活动的情况。web应用可以在页面内部或以HTML弹出框显示这些信息。但有时候需要开发者管理这种提示。有两种类型的提示,姑且称之为hardware notifications和visual notifications,下面分别说明。
Hardware Nofifications
大多数智能手机为开发者提供了让设备蜂鸣或振动的API,Cordova也提供了相同的调用接口。使用前要安装,命令如下:
cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-vibration.git
要使用设备的蜂鸣,应用要调用navigator.notification.beep方法,振动要调用navigator.notification.vibrate方法。每个都带一个参数,用来控制提示要持续多久或发生多少次。beep方法的参数用来控制方法调用时设备蜂鸣多少次:
navigator.notification.beep(quantity);
vibrate方法接受一个持续时间参数,单位是毫秒:
navigator.notification.vibrate(duration);
Visual Notification
web应用可以调用Cordova的一些方法与用户交互,当然可以使用js的alert()、confirm()和prompt()方法,但是Cordova的方法是异步的,并且对显示内容有更大的控制权限。
使用前先安装插件,命令如下:
cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-dialog.git
不同于js中的alert()方法,Cordova的alert()方法如下:
navigator.notification.alert("This is a Cordova Alert()", myCallback, "Alert Test", "Click Me");
这样可以设置对话框标题和按钮文本。js alert()方法是同步的而Cordova alert()方法是异步的,也就是说js警告会马上显示,而Cordova警告在Cordova容器准备好后显示,方法如下:
naviator.notification.alert(message, callback, [title], [buttonLabel])
callback参数定义了点击对话框中按钮时调用的函数,应用在用户点击按钮之前是空闲状态,点击执行回调函数。如果把callback参数设为null,则应用在警告弹出之后继续执行而不会等用户点击按钮。
title和buttonLabel参数都是可选的。
confirm方法与alert方法相似,但它可以指定多个按钮的标签,并且callback方法传入了几个值用来指明点击了哪个按钮。方法声明如下:
navigator.notification.confirm(message, callback,[title],[buttonLabels]);
以下代码段说明了怎样使用confirm方法:
navigator.notification.confirm('Do you want to continue?', doContinue, 'Please confirm', 'Yes, No');
function doContinue(buttonNum) {
navigator.nofication.alert('You chose option #' + 'buttonNum + '?', null, 'Really?', 'Yes');
传递给回调函数的参数是数值型,指出点击了哪个按钮,如果点击第1个按钮回调函数接受1,点击第2个则接受2,依次类推。
Prompt收集来自表单外部的用户信息。调用函数声明如下:
navigator.notification.prompt(message, callback, [title], [buutonLabels], [defaultText]);
同样中括号中的参数是可选的。调用prompt方法并定义处理用户输入的回调函数。
navigator.notification.prompt('Please enter your nickname', gotData, 'NickName', ['Cancel', 'OK'], 'Jimmy');
function gotData(res) {
navigator.notification.alert('You chose option #" + res.buttonIndex + '\nYou entered: ' + res.input1, null, "Results' + 'OK');
注意prompt使用了和confirm不同的按钮标签格式。prompt使用字符串数组,而confirm使用逗号分隔的字符串。
Cordova事件
Cordova框架了一组事件,开发者用来对某些运行Cordova应用的设备上的事件作出反应。事件处理的一种情况是硬件相关活动,如电池状态变化或用户按了某个物理按钮;另一种情况是应用程序状态的变化,如应用被中止或恢复。这些web应用使用的事件同Native应用使用的是一样的。
完整的支持的事件列表如下:
Cordova 事件
backbutton
用户按设备后退键时触发
batterycritical
电池达到关键状态时触发。关键状态的定义因平台而异
batterylow
电池低电量状态时触发。低电量状态的定义因平台而异
batterystatus
电池状态至少改变1%时时触发(增加或减少)
deviceready
cordova容器完成初始化时触发
endcallbutton
在用户按手机的结束通话键时触发
menubutton
在用户按手机的菜单键时触发
在设备失去网络连接时触发
在设备由没有网络连接转换到连接状态时触发
Cordova应用被挂起时触发。一般发生在用户跳转到另一个应用,系统把当前应用放在后台时
在被挂起的应用转到前台时触发
searchbutton
在用户按查找键时触发
startcallbutton
在用户按通话键时触发
volumedownbutton
用户按音量减少键时触发
volumnupbutton
用户按音量键增加时触发
老式手机使用物理按钮来拨通和结束通话。在较新的设备上,这些按钮被移除并用虚拟按键代替。虚拟按键只在用到(如菜单和查找按键),或只用于某些应用(像电话按键)。
大多数的列出的事件都在Cordova容器中实现了。只有电池状态以插件形式实现了。要使应用能够监视电池事件必须首先添加电池状态插件:
cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin=battery-status.git
其中device事件在《cordova应用解析》讨论过。
要监视这些事件可以简单的在应用中为某个事件注册监听器。
document.addEventListener("eventName", eventFunction);
如要监听是否断开网络连接,可以注册offline事件的监听器:
document.addEventListener("offline", isOffline);
function isOffline() {
// 断开网络连接时的动作
事件在不同的移动平台上并不都准确的按期望的情况触发,需要在不同设备上测试确保应用按期望的工作。
3 收藏&&|&&39
你可能感兴趣的文章
14 收藏,1.4k
6 收藏,8.5k
40 收藏,3.4k
图片有问题啊
cordova 中不能在HTML页面中注册事件吗?比如&button onclick="test()"&click me&/button&,必须是要在cordova 加载完成的事件中吗? 还是需要在白名单启用什么就可以呢?
13.6k 浏览
分享到微博?
技术专栏,帮你记录编程中的点滴,提升你对技术的理解收藏感兴趣的文章,丰富自己的知识库
明天提醒我
我要该,理由是:
扫扫下载 App标签:至少1个,最多5个
本文承接上篇《使用Cordova API开发(下)》。
前面讨论的工具和插件都是Cordova框架一部分,但如果框架缺少相应的插件可以自已构建。
3.0以后由plugman和CLI提供的功能让插件有所改变。接下来将会讨论如何创建只有js的插件,还有Android的Native插件,其他平台的构建过程基本也是一样的。
剖析Cordova插件
在构建之前先解析下插件的结构。Cordova有大量的关于如何构建插件的文档。"Plugin Development Guide"说明了如何为插件创建js接口,还有为每个移动平台创建native插件组件各自的指南。
Cordova插件是一组扩展或提升Cordova应用功能的文件。开发者向项目中添加插件,通过提供的js接口和插件交互。插件中包括一个叫plugin.xml的配置文件,一个或多个js文件,加上一些native代码文件(可选),库文件,和相关的内容(HTML, CSS和其他内容文件)。
plugin.xml文件描述了插件并且告诉CLI复制哪些部分的文件,这些文件在每个平台上都不一样。plugin.xml中还有配置,由CLI用来设置平台方面的config.xml配置。plugin.xml文件中有许多可用选项。
一个插件中至少有一个js源文件,用来定义插件公开的方法、对象和属性。可以把所有的都封装到一个文件或多个。也可以把其他js类库打包(如jQuery)。
除了上述两种文件,剩下的文件主要用来定义插件。一般来说,插件要有每个支持平台的一个或多个native源码文件。它们上面还包括其他native文件(源码或预编译的)或内容(图像文件,样式表,HTML文件)。
构建插件的一个好参考是有大量的可用的示例。项目中下载的插件是zip包,可以解压并分析如何构建。一个方法是修改现有插件来满足需求。
创建一个简单的插件
Cordova插件不一定要有native代码,可以完全由js代码组成。在写native插件之前开始写个简单的插件用来说明插件结构和格式。
给下面这个例子中的插件起名叫"Meaning of Life"。创建插件前首先创建一个叫"mol"的文件夹(Meaning of Life"的缩写),在其中创建一个描述插件的plugin.xml文件,代码如下,它是由其他插件的plugin.xml复制过来修改的。
&?xml version="1.0" encoding="UTF-8"?&
&plugin xmlns="http://apache.org/cordova/ns/plugins/1.0" id="com.learningplugin.meaningoflife" version="1.0.0"&
&name&mol&/name&
&description&Calculates the meaning of the life&/description&
&author&Zhang San&/author&
&keywords&mol, meaning of life&/keywords&
&license&Apache 2.0 License&/license&
&engine name="cordova" version="5.0.0" /&
&/engines&
&js-module src="mol.js" name="mol"&
&clobbers target="mol" /&
&/js-module&
&info&This plugin exists to demonstrate how to build a simple, Javascript-Only plugin for Apache Cordova.&/info&
plugin.xml中一些内容作为文档说明作者和目的。 其他的用于驱动plugman或Cordova CLI插件安装过程。下表列出不同的plugin.xml元素。
定义命名空间,ID和插件版本。应该用定义在*http://apache.org/cordova/ns/plugins/1.0*命名空间。plugin的ID在输入*cordova plugins*命令时在插件列表中显示。
定义插件的名字。
description
定义插件的描述信息。
定义插件作者的名字。
定义与插件相关的关键字。Cordova研发组建立了公开、可搜索的插件仓库,添加的关键字能在你把插件提交到仓库后帮助被发现。
定义插件的许可。例中是Cordova默认的许可,还可以是许可描述或许可期限的链接。
用来定义插件支持的Cordova版本。再添加*engine*元素定义每个支持的Cordova版本。
指js文件名,而这个文件会自动以`&script`&标签的形式添加到Cordova项目的起始页。通过在*js-module*中列出插件,可以减少开发者的工作。*clobbers*元素说明了*module.exports*自动添加到*window*对象,让插件方法能够在窗口级别使用。
它是另一个除了*description*外说插件信息的地方。
接下来在mol文件夹中定义一个叫mol.js的文件。代码如下,它简单的创建了一个mol对象,然后定义了一个calculateMOL方法计算"生活的意义"。最后一行输出了mol对象,它等于对象和相关函数以便使用插件的应用调用。
var mol = {
calculateMOL: function() {
return 42;
module.exports =
这样就完成了创建一个简单插件的工作。为了证明它能起作用,创建一个简单的MoL Demo应用。首先在命令行工具中进入开发文件夹,输入以下CLI命令:
cordova creat simplePlugin com.learningplugin.simplePlugin SimplePlugin
cd simplePlugin
cordova platform add android
cordova plugin add your_plugin_location
创建一个名叫simpleplugin.html的页面,其中有一个按钮,点击后执行doMOL函数,调用了mol.calculateMOL()并用alert对话框显示结果。代码如下:
&!DOCTYPE html&
&html lang="en"&
&meta http-equiv="Content-Type" content="text/charset=utf-8"&
&meta name="viewport" content="user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1,width=device-"&
&script src="cordova.js"&&/script&
&script type="text/javascript" charset="utf-8"&
function onBodyLoad() {
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
function doMol() {
var res = mol.calculateMOL();
alert("Meaning of Life =' + res);
&title&Meaning of Life Demo&/title&
&body onload="onBodyLoad()"&
&h1&MoL Demo&/h1&
This is a Cordova application that uses my custom Meaning of Life plugin.
&button onclick="doMOL();"&
Calculate Meaning of Life
运行结果如下图:
创建一个Native插件
下面的例子用来说明如何创建一个Native插件,它向Cordova容器公开了一些native电话API.参考了Android SDK文档找到一些简单有趣的可供公开的接口。接下来几个部分是如何组织plugin代码;知道插件如何工作后向插件添加其他API或较复杂的API会很容易。
首先创建一个叫"carrier"的插件的文件夹,其中有js接口定义和plugin.xml。还创建了一个叫src的子文件夹并向其中创建了一个名叫"android"的文件夹用来存放native代码。这么做不是必要的但显得有条理。
在写native代码前要定义向Cordova应用公开的js接口。创建方法跟上个例子一样,这个例子中创建一个叫carrier的对象,在其中定义了一个或多个能被Cordova应用调用的方法,本例中将公开getCarrierName和getCountryCode方法。
不像上个MoL插件,这些方法不做计算,也不直接返回任何值;相反,它们调用cordova.exec方法,由它向native代码要控制权。这就是著名的Javscript-to-native桥接,可以让Cordova应用执行native API。native代码执行完后,调用回调函数并把结果返回给js对象。
cordova.exec方法声明如下:
cordova.exec(successCallback, errorCallback, 'Pluginobject', 'pluginMethod', [arguments]);
successCallback和errorCallback参数是插件方法调用成功或失败时执行的函数名。'Pluginobject'参数是一个字符串用于识别包括被调用方法的native对象,'pluginMethod'参数是一个字符串,用来识别要执行的方法,最后的'arguments'是一个可选的参数数组,用来传递给pluginMethod。
例子中的getCarrierName和getCountryCode方法不需要任何参数,arguments参数为空并表示为"[]"。
下面是carrier.js的代码,插件的js接口。它开始用声明了一个cordova对象,指向加载的公开exec方法的cordova js库。接下来创建carrier对象,定义两个方法。每个方法都调用了cordova.exec并传入了cordova对象必要的函数名、对象和方法名,用来定位正确的完成功能的native对象和方法。文件最后是module.exports赋值,让carrier对象向Cordova应用公开。代码如下:
var cordova = require('cordova');
var carrier = {
getCarrierName : function(successCallback, errorCallback) {
cordova.exec(successCallback, errorCallback, 'CarrierPlugin', 'getCarrierName', []);
getCountryCode : function(successCallback, errorCallback) {
cordova.exec(successCallback, errorCallback, 'CarrierPlugin', 'getCountryCode', []);
module.exports =
接下来就可以写插件的native部分的代码了。先写js还是native部分不重要,一般来说比较复杂的插件先写native会更容易。
创建Android插件
可以通过创建一个Cordova项目创建插件,然后向应用中写Java类和js接口文件。应用中插件可以工作后再把它们抽取出来放在单独的文件夹用来发布。照这么做的话,可以为插件创建一个文件夹,然后创建一个新的Cordova项目,并使用CLI把插件添加进去。这样就可以独立开发插件并同时测试plugin.xml了。
这个插件将向Cordova应用返回的信息来自于电话API。使用这个API前应用必须引入Context和TelephoneManager类:
import android.content.
import android.telephony.TelephonyM
然后在应用里定义一个对象实例来公开一些方法, 我们用这些方法调用carrier名和国家代码:
tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
要确定carrier名,插件会调用tm.getSimOperatorName()方法,要获得国家代码会调用tm.getSimCountryIso()。
下面的表列出了用于Android插件的Java代码;它定义了一个叫CarrierPlugin的简单的类,这个类公开了exec方法,它是向js的cordova.exec调用执行的内容。
这个类定义了两个常量ACTION_GET_CARRIER和ACTION_GET_COUNTRY_CODE,用来确定Cordova应用调用哪个方法。这样做在以后更改方法名时更容易。
接下来类定义了一个tm对象,它首先调用了super.initialize,这个方法让cordova对象适当的初始化。没有这个方法Java代码就不知道Cordova容器。接下来代码获得了一个当前应用上下文的句柄,用它把tm对象传递给由Telephony API公开的服务。
接下来Java代码重载了exec方法并实现了直接处理来自Cordova应用的调用的代码。在这里实现了一个单独的操作,它确定了调用了哪个动作(能过比较由调用cordova.exec传递的动作名和开始定义的常触发相应的动作)。
如果exec方法确定请求的是getCarrierName动作,之后它调用了Android的getSimOperatorName方法,并通过调用callbackContext.success()方法把结果传回Cordova应用。如果请求的是getCountryCode动作,之后调用Android的getSimCountryIso()方法并通过callbackContext.success()方法把结果传回Cordova应用。
如果过程中某处失败了,代码执行callbackContext.error并把适当的错误消息或错误对象传回用来指出出了什么错。
package com.learningplugin.
import org.apache.cordova.CordovaI
import org.apache.cordova.CallbackC
import org.apache.cordova.CordovaP
import org.apache.cordova.CordovaWebV
import android.content.C
import android.telephony.TelephonyM
import org.json.JSONA
import org.json.JSONE
public class CarrierPlugin extends CordovaPlugin {
public static final String ACTION_GET_CARRIER_NAME = "getCarrierName";
public static final String ACTION_GET_COUNTRY_CODE = "getCountryCode";
public TelephonyM
public void initialize(CordovaInterface cordova, CordovaWebView webView) {
super.initialize(cordova, webView);
Context context = this.cordova.getActivity().getApplicationContext();
tm = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
if (ACTION_GET_CARRIER_NAME.equals(action)) {
callbackContext.success(tm.getSimOperatorName());
if (ACTION_GET_COUNTRY_CODE.equals(action)) {
callbackContext.success(tm.getSimCountryIso());
callbackContext.error("Invalid Action");
} catch (Exception e) {
System.err.println("Exception: " + e.getMessage());
callbackContext.error(e.getMessage());
以上是所有需要的编码。在使用CLI添加新插件之前还需要创建一个plugin.xml文件,它和前边MoL示例相似,但其中因为多了native组件,还需要些额外的设置。内容如下:
&?xml version="1.0" encoding="utf-8"?&
&plugin xmlns="http://apache.org/cordova/ns/plugins/1.0" id="com.learningplugin.carrier" version="1.0.0"&
&name&Carrier&/name&
&author&Zhang San&/author&
&description&Expose mobile carrier related values to Cordova application.&/description&
&keywords&carrier&/keywords&
&license&Apache 2.0 License&/license&
&engine name="cordova" version="5.0.0" /&
&/engines&
&js-module src="carrier.js" name="carrier"&
&clobbers target="carrier" /&
&/js-module&
&platform name="android"&
&source-file src="src/android/CarrierPlugin.java" target-dir="src/com/cordovalearingplugin/carrier" /&
&config-file target="res/xml/config.xml" parent="/*"&
&feature name="CarrierPlugin"&
&param name="android-package" value="com.cordovalearingplugin.carrier.CarrierPlugin"/&
&/feature&
&/config-file&
&config-file target="AndroidManifest.xml"&
&uses-permission android:name="android.permission.READ_PHONE_STATE" /&
&/config-file&
&/platform&
文件中js-module元素定义了js的名字,它将在应用开始时自动加载。它定义了向Cordova公开的js接口。clobbers元素指明了js对象赋值给加载的js对象。本例中,Carrier插件通过一个carrier对象向Cordova应用公开。
&js-module src="carrier.js" name="carrier"&
&clobbers target="carrier" /&
&/js-module&
Cordova应用通过carrier对象访问getCarrierName方法:
carrier.getCarrierName(onSuccess, onFailure);
和前边例子的plugin.xml不同地方是platform节:
&platform name="android"&
&source-file src="src/android/CarrierPlugin.java" target-dir="src/com/cordovalearingplugin/carrier" /&
&config-file target="res/xml/config.xml" parent="/*"&
&feature name="CarrierPlugin"&
&param name="android-package" value="com.cordovalearingplugin.carrier.CarrierPlugin"/&
&/feature&
&/config-file&
&config-file target="AndroidManifest.xml"&
&uses-permission android:name="android.permission.READ_PHONE_STATE" /&
&/config-file&
&/platform&
它定义了某个移动平台专用的设置,包括了相关native代码的设置。可以有一个或多个平台。里边的source-file元素指出了一个或多个Android native源代码文件,当插件安装时由CLI安装。下面的例子指示plugman或CLI复制CarrierPlugin.java文件到Cordova项目Android平台文件夹的*src/com/cordovalerningplugin/carrier文件夹中。
&source-file src="src/android/CarrierPlugin.java" target-dir="src/com/cordovalearingplugin/carrier" /&
config-file元素定义了在插件安装过程中的改动。在例子中,一个叫CarrierPlugin的特性添加到Android项目的config.xml文件中,指向Java类com.cordovalearningplugin.carrier.CarrierPlugin:
&config-file target="res/xml/config.xml" parent="/*"&
&feature name="CarrierPlugin"&
&param name="android-package" value="com.cordovalearingplugin.carrier.CarrierPlugin"/&
&/feature&
&/config-file&
platform最后一个元素定义了另一个配置文件设置。在Android上访问Telephony API需要特别授权。任何要用API的应用都必须向应用的AndroidManifest.xml文件添加入口。这里就要向清单添加android.permission.READ_PHONE_STATE许可:
&config-file target="AndroidManifest.xml"&
&uses-permission android:name="android.permission.READ_PHONE_STATE" /&
&/config-file&
为了测试插件创建一个简单的应用。打开命令行,输入以下命令:
cordova create nativePlugin com.cordovalearningplugin.nativePlugin NativePlugin
cd nativePlugin
cordova platform add android
cordova plugin add your_carrier_plugin_location
在应用的index.html中显示两个按钮,一个调用getCarrierName另一个调用getCountryCode。执行相同的execute函数来显示两个方法的结果,代码如下:
&!DOCTYPE html&
&html lang="en"&
&meta charset="UTF-8"&
&title&Carrier Demo&/title&
&meta http-equiv="Content-Type" content="text/charset=utf-8"&
&meta name="viewport" content="user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1,width=device-width"&
&script type="text/javascript" charset="utf-8" src="cordova.js"&&/script&
&script type="text/javascript" charset="utf-8"&
function onBodyLoad() {
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
function doSomething1() {
carrier.getCarrierName(onSuccess, onFailure);
function doSomething2() {
carrier.getCountryCode(onSuccess, onFailure);
function onSuccess(result) {
var resStr = "Result: " +
function onFailure(err) {
console.log("onFailure: " + JSON.stringify(err));
alert("Failure: " + err);
&body onload="onBodyLoad()"&
&h1&Carrier Demo&/h1&
This is a Cordova application that uses my fancy new Carrier Plugin.
&button onclick="doSomething1();"&GetCarrierName&/button&
&button onclick="doSomething2()"&GetCountryCode&/button&
程序运行后如下图1,点各按钮的弹出信息见图2和3。
部署插件的时候有几种方法。可以把插件文件夹打包成zip格式(插件文件夹包括plugin.xml文件和所有的源代码文件)。用户拿到之后先解压到一个文件夹,再使用cordova plugin add安装。
还可以通过gitHub发布,你可以创建GitHub帐号并把插件放在里边。文件升级时可以让其他开发者知道这一消息。PhoneGap开发团队创建了一个仓库(),在这你可以发布你的插件的信息。团队致力于开发一个插件发现系统,以便让开发者更方便的定位在应用中用到的插件。
3 收藏&&|&&21
你可能感兴趣的文章
10 收藏,2.5k
20 收藏,6k
40 收藏,3.4k
nativePlugin demoplugin.xml 的 &param name="android-package" value="com.cordovalearingplugin.carrier.CarrierPlugin"/& 里的value值改成 CarrierPlugin.java的包名 com.learningplugin.carrier 就好了。
因该是"包名.类名",所以是com.learningplugin.carrier.CarrierPlugin
我按照创建简单插件。怎么点击没有反应呢。甚至我复制的js
需要把问题描述清楚些
楼主能不能把示例项目共享一下啊?
function onSuccess(result) {
var resStr = "Result: " +
函数里面应该要加一行:alert(resStr);
才能产生反应吧博主
创建一个简单的插件 这都没运行起来simpleplugin.html
function doMol() {
&button onclick="doMOL();"& //javascript大小写敏感eclipse - logcat 才发现的…弄半天没成功 还是滚回去看官方文档吧╯︿╰
请问使用什么工具来开发cordova 插件?
创建只有js的插件,有没有使用demo??
后一个表示调试不通
18.5k 浏览
13.6k 浏览
分享到微博?
你好!看起来你挺喜欢这个内容,但是你还没有注册帐号。 当你创建了帐号,我们能准确地追踪你关注的问题,在有新答案或内容的时候收到网页和邮件通知。还能直接向作者咨询更多细节。如果上面的内容有帮助,记得点赞 (????)? 表示感谢。
明天提醒我
我要该,理由是:
扫扫下载 App}

我要回帖

更多关于 cordova plugin http 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信