概述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访问本地接口的两种方法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
评论列表(0条)