Phonegap通过JS访问本地接口的两种方法

Phonegap通过JS访问本地接口的两种方法,第1张

概述Phonegap为跨设备的应用开发提供了一个解决方案。如果某个应用只有js和html,则可以通过Phonegap的在线build工具,编译出多个平台的app安装包。当然通过Phonegap提供的js可以访问部分设备的资源,如网络连接(Connection)、相机(Camera)、文件(File)、存储(Storage)等,具体可以参看Phonegap开发文档。但很多Android应用,仅仅使用这些资源是满足不了需求的,所以必然需要访问本地接口方法。 初步实验,至少有两个方法可以访问本地的接口。开发Phonegap Plugin。通过实现Phonegap提供的接口,然后在config.xml中注册插件,就可以通过js开访问了。具体可以参考Plugin Development Guide和Developing a Plugin on Android。直接写Java类,通过DroidGap.appView.addJavascriptInterface暴露Java接口。按照这篇博客可以写出来。对于第一种方法,虽然官方已经提供了教程,但我认为还是有必要梳理一下流程,因为官网的教程忽略了由于升级需要的更改。实现CordovaPlugin 提供接口Java代码  <span "font-size: 14px;">package org.apache.cordova.plugin;    import org.apache.cordova.api.CordovaPlugin;  import org.apache.cordova.api.PluginResult;  import org.json.JSONArray;  import org.json.JSONException;  import org.json.JSONObject;    /**  * This class echoes a string called from JavaScript.  */  public class Echo extends CordovaPlugin {      @Override      public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {          if (action.equals("echo")) {              String message = args.getString(0);               this.echo(message, callbackContext);              return true;          }          return false;      }        private void echo(String message, CallbackContext callbackContext) {          if (message != null && message.length() > 0) {               callbackContext.success(message);          } else {              callbackContext.error("Expected one non-empty string argument.");          }      }  }</span>   修改config.xml添加以下代码 Xml代码  <span style="font-size: 14px;"><plugin name="Echo" value="org.apache.cordova.plugin.Echo" /></span>  为windows(或者其他对象)添加echo方法官网为cordova.exec(...),这里需要根据2.6的js接口使用作以下修改。Js代码  <span "font-size: 14px;">window.echo = function(str, callback) {</span>  <span "font-size: 14px;">    <strong>var exec = cordova.require('cordova/exec');</strong>      <strong>exec</strong>(callback, function(err) {          callback('Nothing to echo.');      }, "Echo", "echo", [str]);  };</span>    通过js调用接口 Js代码  <span "font-size: 14px;">window.echo("echome", function(echoValue) {      alert(echoValue == "echome"); // should alert true.  });</span>   另外,对于回调函数调用的线程有三种情况:  如果直接调用,即callbackContext.success(),则在WebCore 线程中执行,而是在UI线程。如果希望在UI线程中直接,需要将回调函数封装在Runanble中,放在cordova.getActivity().runOnUiThread中执行。 Java代码  <span "font-size: 14px;">cordova.getActivity().runOnUiThread(new Runnable() {              public void run() {                  ...                  callbackContext.success(); // Thread-safe.              }          });   </span>    如果期望在单独的线程中执行(不至于阻塞WebCore线程),则使用 cordova.getThreadPool().execute方法。Java代码  <span "font-size: 14px;"> cordova.getThreadPool().execute(new Runnable() {              public void run() {                  ...                  callbackContext.success(); // Thread-safe.              }          });</span>  

Phonegap为跨设备的应用开发提供了一个解决方案。如果某个应用只有Js和HTML,则可以通过Phonegap的在线build工具,编译出多个平台的app安装包。当然通过Phonegap提供的Js可以访问部分设备的资源,如网络连接(Connection)、相机(Camera)、文件(file)、存储(Storage)等,具体可以参看。但很多Android应用,仅仅使用这些资源是满足不了需求的,所以必然需要访问本地接口的方法。

 

初步实验,至少有两个方法可以访问本地的接口。

开发Phonegap Plugin。通过实现Phonegap提供的接口,然后在config.xml中注册插件,就可以通过js开访问了。具体可以参考和。直接写Java类,通过DroidGap.appView.addJavascriptInterface暴露Java接口。按照可以写出来。

对于第一种方法,虽然官方已经提供了教程,但我认为还是有必要梳理一下流程,因为官网的教程忽略了由于升级需要的更改。

实现CordovaPlugin 提供接口> org.apache.cordova.plugin;     org.apache.cordova.API.CordovaPlugin;   org.apache.cordova.API.PluginResult;   org.Json.JsONArray;   org.Json.JsONException;   org.Json.JsONObject;          Echo  CordovaPlugin {              execute(String action, JsONArray args, CallbackContext callbackContext)  JsONException {           (action.equals()) {              String message = args.getString();               .echo(message, callbackContext);               ;          }           ;      }          echo(String message, CallbackContext callbackContext) {           (message !=  && message.length() > ) {               callbackContext.success(message);          }  {              callbackContext.error();          }      }  }  @H_502_237@

 

修改config.xml

添加以下代码

 

 = = =   @H_502_237@为windows(或者其他对象)添加echo方法

官网为cordova.exec(...),这里需要根据2.6的Js接口使用作以下修改。

>window.echo = (str, callback) {  >     exec = cordova.require();      exec(callback, (err) {          callback();      }, , [str]);  };  @H_502_237@

 

 通过Js调用接口

 

>window.echo((echovalue) {      alert(echovalue == );   });  @H_502_237@

 另外,对于回调函数调用的线程有三种情况:

 

 

如果直接调用,即callbackContext.success(),则在WebCore 线程中执行,而是在UI线程。如果希望在UI线程中直接,需要将回调函数封装在Runanble中,放在cordova.getActivity().runOnUiThread中执行。

 

>cordova.getActivity().runOnUiThread( Runnable() {                run() {                  ...                  callbackContext.success();               }          });     

@H_502_237@

 

 

如果期望在单独的线程中执行(不至于阻塞WebCore线程),则使用 cordova.getThreadPool().execute方法。> cordova.getThreadPool().execute( Runnable() {                run() {                  ...                  callbackContext.success();               }          });  

@H_502237@@H502237@@H502_237@

总结

以上是内存溢出为你收集整理的Phonegap通过JS访问本地接口的两种方法全部内容,希望文章能够帮你解决Phonegap通过JS访问本地接口的两种方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1149746.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存