`
strong_fee
  • 浏览: 178730 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

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

阅读更多

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

 

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

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

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

  • 实现CordovaPlugin 提供接口
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.");
        }
    }
}

 

  • 修改config.xml

添加以下代码

 

<plugin name="Echo" value="org.apache.cordova.plugin.Echo" />
  • 为windows(或者其他对象)添加echo方法

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

window.echo = function(str, callback) {
    var exec = cordova.require('cordova/exec');
    exec(callback, function(err) {
        callback('Nothing to echo.');
    }, "Echo", "echo", [str]);
};

 

  •  通过js调用接口

 

window.echo("echome", function(echoValue) {
    alert(echoValue == "echome"); // should alert true.
});

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

 

 

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

 

cordova.getActivity().runOnUiThread(new Runnable() {
            public void run() {
                ...
                callbackContext.success(); // Thread-safe.
            }
        });
 

 

 

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

 

分享到:
评论

相关推荐

    phonegap js调用本地java

    在PhoneGap中,通过JavaScript调用本地设备功能是通过Cordova插件系统来实现的,这对于创建混合应用非常有用,因为它们可以利用Web技术同时访问手机的硬件特性。 标题"phonegap js调用本地java"指的是使用PhoneGap...

    PhoneGap实例

    1. 插件结构:PhoneGap插件由两部分组成——JavaScript接口和原生代码(Java、Objective-C或Swift)。JavaScript部分负责暴露API给JavaScript代码,原生代码则实现与设备硬件或系统的交互。 2. 创建插件:使用...

    PhoneGap例子

    PhoneGap是一种跨平台的移动应用开发框架,它允许开发者使用HTML、CSS和JavaScript来构建原生的移动应用程序。PhoneGap的核心是Apache Cordova,它是一个开源项目,为开发者提供了与设备硬件交互的能力,如访问...

    PhoneGap+Jquery mobile

    PhoneGap和jQuery Mobile是两种非常重要的移动应用开发技术,它们结合使用可以构建跨平台的混合应用程序。PhoneGap是由Adobe开发的一个开源框架,它允许开发者使用HTML、CSS和JavaScript来创建原生的移动应用,而...

    使用phonegap进行本地存储的实现方法

    PhoneGap 支持两种主要的本地存储方式:Web Storage(包括 localStorage 和 sessionStorage)以及 Web SQL 数据库。 1. Web Storage (localStorage): `localStorage` 是一种持久化的存储机制,数据会在浏览器关闭...

    phonegap+jqueryMobilejs源码项目

    5. **PhoneGap API使用**:在项目中,我们可以看到JavaScript代码如何调用PhoneGap的API,例如获取设备信息、访问本地文件系统、调用设备相机等。这些API使Web应用能够充分利用移动设备的功能。 6. **firstscreen...

    phonegap开发插件合集

    PhoneGap是一种流行的开源框架,它允许开发者使用HTML、CSS和JavaScript来构建原生移动应用程序。PhoneGap的核心理念是通过Web技术实现跨平台的移动应用开发,同时能够访问设备的硬件功能,如摄像头、GPS、存储等。...

    phonegap与sencha touch2的js库

    PhoneGap的核心是Apache Cordova,它提供了API接口,使得Web应用能够访问设备的功能,如摄像头、GPS、联系人列表等。通过PhoneGap,开发者可以编写一次代码,然后将其打包为多个平台的应用,如iOS、Android、Windows...

    phonegap桌面开发工具

    PhoneGap是一个开源的移动应用开发框架,它允许开发者使用HTML、CSS和...通过这个完整的工具链和环境,开发者可以更深入地利用PhoneGap框架的所有功能,包括深入访问移动设备的硬件接口和各种移动平台的特定API。

    android PhoneGap 自定义插件

    这个特定的“android PhoneGap 自定义插件”是关于在Android平台上扩展PhoneGap功能的一个实例,通过编写自定义插件,开发者可以调用Android的本地API,实现更丰富的功能,比如访问硬件设备、系统服务等。...

    Downloading files to a PhoneGap application

    PhoneGap通过一个WebView组件将Web技术与设备的API接口结合,使得开发者能够访问设备的各种功能,如相机、联系人、文件系统等。为了下载文件,我们需要引入`cordova-plugin-file`插件,这个插件提供了对本地文件系统...

    Phonegap iOS 的web 应用插件demo

    它的核心思想是将Web应用打包为一个原生的移动应用,通过WebView组件显示Web内容,并提供一套API接口,使得JavaScript可以调用设备的原生功能,如摄像头、GPS、存储等。这使得开发者可以用熟悉的Web技术快速开发跨...

    appSample:这使用phonegap创建一个简单的示例应用程序。 * iOS,Android

    在"appSample"中,JavaScript代码可能会调用PhoneGap提供的API,例如获取设备信息、监听用户触摸事件或访问本地存储。 在"appSample-master"这个压缩包中,除了HTML、CSS和JavaScript文件,可能还包括配置文件如...

    TeachingVerbs:使用 Phonegap 制作,这是我为学校制作的项目,目前适用于 Android,但我想将其扩展到 Windows Phone 和 iOS。 谢谢您的合作

    这些插件允许JavaScript调用设备的原生功能,比如访问本地文件系统、获取设备信息等。因此,开发者需要熟悉Java语言,理解Android的Activity和Service概念,以及如何使用Android的Intent系统。 6. **PhoneGap插件...

    jquery mobile, phoegap

    - **本地 API 访问**:通过 JavaScript 接口调用设备的原生功能,如摄像头、GPS、加速度计等。 - **Web 视图封装**:在设备的原生壳体内嵌入一个浏览器引擎,展示 HTML5 应用。 - **应用商店发布**:生成的原生...

    cordova二维码扫描插件

    此外,它在iOS和Android两大主流平台上都具有良好的兼容性,这确保了无论用户使用何种操作系统,都能享受到一致的扫描体验。 在实际应用中,开发者可以通过简单的API调用来集成这个插件。通常,这包括初始化插件、...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    综上所述,“认我测”在线认证检测系统,率先填补了认证检测领域移动端的空缺,提供了Web浏览器+移动端的双端访问模式,给用户提供了多种访问途径,真正实现了用户和检测机构的随时随地在线下单检测。 关键词:...

    Todo:phonegapcordova 中的待办事项列表 ibuild

    PhoneGap和Cordova是同一个项目的两个品牌名称,它们提供了一种使用Web技术(如HTML、CSS和JavaScript)来创建原生移动应用程序的平台。 【描述】:“待办事项列表应用 在cordova/phonegap中构建待办事项列表应用...

    wheresmyrefund:我的退款 Phongap Cordova 应用程序在哪里

    PhoneGap和Cordova是两个紧密相关的开源框架,用于构建跨平台的原生移动应用程序。它们允许开发者使用HTML、CSS和JavaScript等Web技术来开发应用,同时能够访问设备的功能,如摄像头、GPS和 accelerometer。 【描述...

Global site tag (gtag.js) - Google Analytics