phonegap plugin 的编写(android)

Phonegap使用Javascript为不同移动开发提供了统一的接口,如调用本地GPS、摄像头、传感器等设备和本地存储等平台操作,但是如果我们想针对特殊的应用调用平台原生的代码库时如何制作插件呢?Phonegap为我们提供了编写平台原生代码的接口。

0.问题描述:

在android平台上有一个java写的类库,如何通过phonegap调用到该类库中的数据。

java(HelloWorld.java)文件内容:

1    package com.test;
2    public class HelloWorld {
3        private String sayHello(String name){
4            return "hello world from: "+name;
5        }
6    }

1.修改原有java文件(HelloWorld.java)

1.1引入所需包

首先必须在工程中添加phonegap.jar包,然后在HelloWorld.java中引入:

1    import com.phonegap.api.Plugin;
2    import com.phonegap.api.PluginResult;
3    import com.phonegap.api.PluginResult.Status;

并让原有的类继承com.phonegap.api.Plugin类,
此外还需要android中的org.json包中的部分内容.

1.2继承Plugin

继承Plugin需要实现execute这个函数。
最终修改完成的代码如下:

 1package com.plugin.test;
 2
 3import org.json.JSONArray;
 4import org.json.JSONException;
 5import org.json.JSONObject;
 6
 7import android.util.Log;
 8
 9import com.phonegap.api.Plugin;
10import com.phonegap.api.PluginResult;
11import com.phonegap.api.PluginResult.Status;
12
13public class HelloWorld extends Plugin {
14
15  public static final String ACTION ="hello";
16  @Override
17  public PluginResult execute(String action, JSONArray data, String callbackId) {
18    PluginResult result = null;
19    if(ACTION.equals(action)) {
20      try {
21      String name = data.getString(0);
22      JSONObject fileInfo = new JSONObject();
23      fileInfo.put("hello", sayHello(name));
24      result = new PluginResult(Status.OK,fileInfo); 
25      } catch (JSONException jsonEx) {
26      Log.d("HelloWorldPlugin", "Got JSON Exception " + jsonEx.getMessage());
27      }
28      } else {
29      result = new PluginResult(Status.JSON_EXCEPTION);
30      }
31    return result;
32  }
33  private String sayHello(String name){
34    return "hello world from: "+name;
35  }
36}

2.编写javascript接口

javascript接口很简单,只需要按照PhoneGap的规范就可以了:

1var  HelloWorld = {
2  hello: function(name,successCallback,failureCallback){
3    return PhoneGap.exec(successCallback,failureCallback,'HelloWorld','hello',[name]);
4  }
5};

将其保存为hello.js放在 assert/www/ 目录下。

3.将该插件增加到phonegap的插件组中

在 res/xml/plugins.xml中的标签内添加如下内容:

1    <plugin name="HelloWorld" value="com.plugin.test.HelloWorld"/>

4.在页面中调用

在主程序loadUrl的html文件中增加一个id=hello的button和id=result的div,并添加js调用代码:

 1<input disabled id = "hello" type="button" value="Hello" />
 2<hr>
 3<div id="result"></div>
 4<hr>
 5<script type="text/javascript">
 6  document.addEventListener('deviceready',bindEv,true);
 7  function bindEv(){
 8    var btn = document.getElementById("hello");
 9    btn.onclick = function() {
10      HelloWorld.hello("Shiyj",function(r){
11        document.getElementById("result").innerHTML=r.hello
12      },function(e){log(e)});
13    }
14    btn.disabled=false;
15  }
16</script>

5.流程介绍:

流程介绍

Powered by Engin & toto

comments powered by Disqus