关键词搜索

源码搜索 ×
×

为PhoneGap写一个android插件

发布2014-08-14浏览4781次

详情内容

为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:

  1. package com.example.test.plugin;
  2. import org.apache.cordova.CallbackContext;
  3. import org.apache.cordova.CordovaPlugin;
  4. import org.json.JSONArray;
  5. import org.json.JSONException;
  6. public class Hello extends CordovaPlugin{
  7. @Override
  8. public boolean execute(String action
  9. , JSONArray args
  10. , CallbackContext callbackContext) throws JSONException {
  11. try{
  12. if (action.equals("sayHello")) {
  13. callbackContext.success("Hello World!你好,科尔多瓦!");
  14. return true;
  15. }
  16. } catch (Exception e) {
  17. callbackContext.error("Oh shit!");
  18. return false;
  19. }
  20. return super.execute(action, args, callbackContext);
  21. }
  22. }

2)config.xml

修改res/xml/config.xml

在节点<widget>里加入:

  1. <feature name="Hello">
  2. <param name="android-package" value="com.example.test.plugin.Hello" />
  3. </feature>

3、调用插件

调用是javascript唱独角戏。

1)添加 js/plugin.js

  1. var helloPlugin = {
  2. say: function(successCallback, errorCallback) {
  3. cordova.exec(
  4. successCallback, // success callback function
  5. errorCallback, // error callback function
  6. 'Hello', // mapped to our native Java class called "CalendarPlugin"
  7. 'sayHello', // with this action name
  8. [] // and this array of custom arguments to create our entry
  9. );
  10. }
  11. }


2)修改js/index.js

修改部分主要在结尾部分

  1. var app = {
  2. // Application Constructor
  3. initialize: function() {
  4. this.bindEvents();
  5. },
  6. // Bind Event Listeners
  7. //
  8. // Bind any events that are required on startup. Common events are:
  9. // 'load', 'deviceready', 'offline', and 'online'.
  10. bindEvents: function() {
  11. document.addEventListener('deviceready', this.onDeviceReady, false);
  12. },
  13. // deviceready Event Handler
  14. //
  15. // The scope of 'this' is the event. In order to call the 'receivedEvent'
  16. // function, we must explicitly call 'app.receivedEvent(...);'
  17. onDeviceReady: function() {
  18. app.receivedEvent('deviceready');
  19. },
  20. // Update DOM on a Received Event
  21. receivedEvent: function(id) {
  22. var parentElement = document.getElementById(id);
  23. var listeningElement = parentElement.querySelector('.listening');
  24. var receivedElement = parentElement.querySelector('.received');
  25. listeningElement.setAttribute('style', 'display:none;');
  26. receivedElement.setAttribute('style', 'display:block;');
  27. console.log('Received Event: ' + id);
  28. app.sayHello();
  29. },
  30. sayHello: function(){
  31. var success = function(message) { alert(message); };
  32. var error = function(message) { alert("Oopsie! " + message); };
  33. helloPlugin.say(success, error);
  34. }
  35. };


3)修改首页index.html
  1. <script type="text/javascript" src="cordova.js"></script>
  2. <script type="text/javascript" src="js/index.js"></script>
  3. <script type="text/javascript" src="js/plugin.js"></script>
  4. <script type="text/javascript">
  5. app.initialize();
  6. </script>

至此,我们就完成了一个for phonegap的安卓插件的编写和调用过程。
按道理,插件应该独立于具体工程,可以供多个工程调用,但本示例是插件直接写于工程内。独立的方式,我还不知道怎么写。



相关技术文章

最新源码

下载排行榜

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载