android - Worklight如何实现Native和Hybrid Applications的交互?

标签 android ibm-mobilefirst

我将从解释我尝试实现的用例开始。我有两个不同的应用程序:

  1. native android 应用程序,以及
  2. 基于 Worklight 的混合应用

用例从打开 native android 应用程序开始。在特定事件中,我打开带有一些参数的混合应用程序。

在混合应用程序中,我在 native 端获取传递的参数,现在我想在应用程序的 Web View (JavaScript、HTML)中使用该数据。我怎样才能做到这一点?

例如:
我打开了第一个 android 应用程序。其中有一个文本框和一个按钮。我在文本框中输入了我的手机号码,然后点击了按钮。在按钮上单击我有代码启动另一个混合应用程序并传递手机号码。

我能够在代码的 native 端提取该手机号码参数。如何将其传递给 Web (JavaScript) 部分?

任何帮助将不胜感激。

最佳答案

如果您使用的是 Worklight 6.2,则可以通过两种方式实现。

  1. 使用 Simple Data Sharing API
    使用此 API,我认为您甚至不需要尝试从 native View 获取数据并将其移回混合应用程序中的 WebView ,它只会在 WebView 中可用。

    在这个答案中解释概念和执行会显得太长;我建议先查看文档,看看它是否符合您的需求。

    但我建议:

  2. 使用 Action Sender API
    使用此 API,您可以轻松地将数据从 Web 移动到本地或从本地移动到 Web。

    在你的情况下,你说你在打开Hybrid应用程序后在 native 代码中已经有了数据,你只需要将它移动到webview,那么需要做的是:

不幸的是此时没有training module可用于具体演示此功能,但会有。

这是您需要做的事情的基本前提:

  • 在 JavaScript 中实现接收器:

    function wlCommonInit(){
        WL.App.addActionReceiver ("doSomething", actionReceiver);  
    }
    
    function actionReceiver(received){
        // Do something with the received data.
        alert (received.data.someProperty);
    }
    
  • 在混合应用程序的主要 Java 类(或其他地方,取决于您的应用程序)中,您在 else 结束括号之后的 onInitWebFrameworkComplete 中实现以下内容:

    public void onInitWebFrameworkComplete(WLInitWebFrameworkResult result){
        ...
        ...     
        else {
            handleWebFrameworkInitFailure(result);
        }
    
        JSONObject data = new JSONObject();
        try {
            data.put("someProperty", 12345);
        } catch (JSONException e) {
            // handle it...
        }
        WL.getInstance().sendActionToJS("doSomething", data);
    }
    

最终结果是,一旦您打开该应用,您就会收到一条显示“12345”的警告。

关于android - Worklight如何实现Native和Hybrid Applications的交互?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25698289/

相关文章:

android:layout_alignParentBottom 在没有显式布局高度的情况下被忽略作为 ListView 中的一行

android - 如何更改 ListPreference 对话框的外观

android - 音频(录音 - 播放)Android 异常回声

ios - 架构 libcordova.a 的重复符号

javascript - 使用 sql 适配器进行删除操作时出错

android - 正确创建和查询 SQLite 错误表

android - 从内部类中访问的变量需要声明为final

c++ - Zxing - 我在哪里可以找到这些文件? zxing-all-in-one.cpp 和 zxing-all-in-one.h

javascript - 从 Dojo 转换为 jQuery

java - Worklight 服务器正在运行,但 html 页面不显示