为PhoneGap写一个android插件
为PhoneGap写一个android插件,要怎么做?
其实这句话应该反过来说,为android写一个PhoneGap插件,要怎么做?
这里以最简单的Hello World!为例,做个说明:
1、第一步,要先建立一个支持PhoneGap(Cordova)的android工程
因为这个插件本质上是安卓插件,用于PhoneGap,因此,要二者支持才行,所以我们要建立一个支持PhoneGap(Cordova)的android工程,插件在这个工程里面编写。
扫盲:PhoneGap现在已经出售给了Apache基金会,现在改名为Cordova。之所以用这个名字,是因为创建PhoneGap的那个公司,当时位于一条名叫Cordova的街道,大概是为了纪念吧。
现在要下载最新的cordova的话,应该去Cordova官网,而PhoneGap官网停留在了2.9.1。
我们采用cordova CLI来进行工程创建。这样会比较方便。否则要先创建安卓工程,然后手动将cordova的东西拷到工程文件夹内,还要修改代码,麻烦得很。
1)先创建一个cordova项目
在命令行方式下:
cordova create hello com.example.test HelloWorld
这样就在当前路径,创建了一个名为hello的文件夹,里面是cordova的各种文件
2)设置cordova支持android平台
在命令行方式下:
cd hello
cordova platform add android
这样在hello\platforms文件夹下,多了一个android子目录,这个就是我们要的支持phoegap的安卓工程了,插件可以在这个工程里面编写。
2、编写插件
1)Hello.java
用eclipse打开该工程
在src下新建包及class
Hello.java:
package com.example.test.plugin; import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaPlugin;
import org.json.JSONArray;
import org.json.JSONException; public class Hello extends CordovaPlugin{ @Override
public boolean execute(String action
, JSONArray args
, CallbackContext callbackContext) throws JSONException {
try{
if (action.equals("sayHello")) {
callbackContext.success("Hello World!你好,科尔多瓦!");
return true;
}
} catch (Exception e) {
callbackContext.error("Oh shit!");
return false;
}
return super.execute(action, args, callbackContext);
}
}
2)config.xml
修改res/xml/config.xml
在节点<widget>里加入:
<feature name="Hello">
<param name="android-package" value="com.example.test.plugin.Hello" />
</feature>
3、调用插件
调用是javascript唱独角戏。
var helloPlugin = {
say: function(successCallback, errorCallback) {
cordova.exec(
successCallback, // success callback function
errorCallback, // error callback function
'Hello', // mapped to our native Java class called "CalendarPlugin"
'sayHello', // with this action name
[] // and this array of custom arguments to create our entry
);
}
}
var app = {
// Application Constructor
initialize: function() {
this.bindEvents();
},
// Bind Event Listeners
//
// Bind any events that are required on startup. Common events are:
// 'load', 'deviceready', 'offline', and 'online'.
bindEvents: function() {
document.addEventListener('deviceready', this.onDeviceReady, false);
},
// deviceready Event Handler
//
// The scope of 'this' is the event. In order to call the 'receivedEvent'
// function, we must explicitly call 'app.receivedEvent(...);'
onDeviceReady: function() {
app.receivedEvent('deviceready');
},
// Update DOM on a Received Event
receivedEvent: function(id) {
var parentElement = document.getElementById(id);
var listeningElement = parentElement.querySelector('.listening');
var receivedElement = parentElement.querySelector('.received'); listeningElement.setAttribute('style', 'display:none;');
receivedElement.setAttribute('style', 'display:block;'); console.log('Received Event: ' + id);
app.sayHello();
},
sayHello: function(){
var success = function(message) { alert(message); };
var error = function(message) { alert("Oopsie! " + message); };
helloPlugin.say(success, error);
}
};
<script type="text/javascript" src="cordova.js"></script>
<script type="text/javascript" src="js/index.js"></script>
<script type="text/javascript" src="js/plugin.js"></script>
<script type="text/javascript">
app.initialize();
</script>
至此,我们就完成了一个for phonegap的安卓插件的编写和调用过程。
为PhoneGap写一个android插件的更多相关文章
- 如何写一个jquery插件
本文总结整理一下如何写一个jquery插件?虽然现今各种mvvm框架异常火爆,但是jquery这个陪伴我们成长,给我们带来很多帮助的优秀的库不应该被我们抛弃,写此文章,作为对以往欠下的笔记的补充, ...
- 写一个Android输入法01——最简步骤
本文演示用Android Studio写一个最简单的输入法.界面和交互都很简陋,只为剔肉留骨,彰显写一个Android输入法的要点. 1.打开Android Studio创建项目,该项目和普通APP的 ...
- 如何给Ionic写一个cordova插件
写一个cordova插件 之前由javaWeb转html5开发,由于面临新技术,遂在适应的过程中极为挣扎,不过还好~,这个过程也极为短暂:现如今面临一些较为复杂的需求还会有一丝丝头痛,却没有一开始那么 ...
- 自己写一个 jQuery 插件
我知道这一天终将会到来,现在,它来了. 需求 开发 SharePoint 的 CSOM 应用时,经常需要在网页上输出一些信息. 这种需求和 alert 的弹窗.F12 的断点查看信息的场景是不一样的: ...
- 教你写一个Android可快速复用的小键盘输入控件
引子 在Android项目开发中特别是一些稍大型的项目,面对需求文档的时候你经常会发现很多地方用到了同样的组件,但是又略有不同.比如这个: 右边是一个小键盘输入板,左边当焦点不同的时候分别用右边的小键 ...
- 写一个umi插件 自动生成代码 解放cv的双手
引言 最近在写一个中台项目,使用的react的umi框架. 各种增删改查.基本是列表页 新建页 详情页这种页面 为了避免不必要的简单重复(主要是想偷懒) 于是想去实现自己的一个代码生成器 探索 首先, ...
- 80行代码教你写一个Webpack插件并发布到npm
1. 前言 最近在学习 Webpack 相关的原理,以前只知道 Webpack 的配置方法,但并不知道其内部流程,经过一轮的学习,感觉获益良多,为了巩固学习的内容,我决定尝试自己动手写一个插件. 这个 ...
- 基于vue框架手写一个notify插件,实现通知功能
简单编写一个vue插件,当点击时触发notify插件,dom中出现相应内容并且在相应时间之后清除,我们可以在根组件中设定通知内容和延迟消失时间. 1. 基础知识 我们首先初始化一个vue项目,删除不需 ...
- 写一个jq插件
本文章摘自博客园的http://www.cnblogs.com/JustinYoung/archive/2010/03/30/jquery-chajian.html,写此文章只是方便自己记载技术 一个 ...
随机推荐
- 【译】x86程序员手册23-6.5组合页与段保护
6.5 Combining Page and Segment Protection 组合页与段保护 When paging is enabled, the 80386 first evaluates ...
- (转)Hibernate框架基础——一对多关联关系映射
http://blog.csdn.net/yerenyuan_pku/article/details/52746413 上一篇文章Hibernate框架基础——映射集合属性详细讲解的是值类型的集合(即 ...
- 如何创建TWaver 3D的轮廓选中效果
在一般的游戏中,物体的选中效果会是这样: TWaver 3D中,物体的默认的选中效果一般都是一个方方正正的外框.在HTML5的Mono版本中,TWaver提供了轮廓线样式的选中效果. 通过如下代码把几 ...
- 反片语(Ananagrams,Uva 156)
输入一些单词,找出所有满足如下条件的单词:该单词不能通过字母重排,得到输入文 本中的另外一个单词.在判断是否满足条件时,字母不分大小写,但在输出时应保留输入中 的大小写,按字典序进行排列(所有大写字母 ...
- mysql运维常用
一.用户授权 用户授权主要指: 1.可以限制用户访问那些库.表 2.可以限制用户对库.表执行select.create.delete.alter.drop等操作 3.可以限制用户登陆的IP.IP段.或 ...
- buf.readInt32BE()
buf.readInt32BE(offset[, noAssert]) buf.readInt32LE(offset[, noAssert]) offset {Number} 0 <= offs ...
- Django DTL模板语法中的循环
from django.shortcuts import render def index(request): context={ 'books':[ '5年高考3年模拟', '家猪养殖与配种', ' ...
- 05 Python运算符
Python运算符: 此图来源于菜鸟教程,更详细参考 http://www.runoob.com/python3/python3-basic-operators.html 说明: 同一优先级的通常从左 ...
- shell输出颜色、printf输出颜色
1.echo开启彩色输出: -e 开启echo中的转义: \e或者\033来输出Esc颜色: 恢复默认颜色为:\e[0m; 命令格式: echo -e "\e[字背景颜色:文字颜色m字符串\ ...
- 数位dp备忘录
hdu 4734:把限制值化为数组形式,逐位求解 hdu 4507:类似于上题,其中求平方和的方法很妙 SPOJ BALNUM Balanced Numbers:经典数位dp,注意两点,1,不要把前 ...