2014-09-06 71 views
3

我将从解释我尝试实现的用例开始。我有两个不同的应用程序:如何在Worklight中实现Native和Hybrid应用程序之间的交互?

  1. 原生Android应用程序,以及基于
  2. 工作灯,
  3. 混合应用

用例与开原生Android应用程序启动。在特定的事件中,我打开混合应用程序的一些参数。

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

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

我能够在代码的本机端提取移动号码参数。如何将它传递给Web(JavaScript)的一部分?

任何帮助将不胜感激。

回答

2

我将使用代码片段描述解决方案。

首先从本机应用程序打开混合应用程序。

Intent intent = getPackageManager().getLaunchIntentForPackage(“URI Of Target Application”); 
intent.putExtra("someData", someData); 
startActivity(intent); 

现在工作灯基于混合应用程序将启动,并从本地部分,我们将提取传递的数据,并将其存储在共享偏好:

Bundle dataBundle = getIntent().getExtras(); 
String someData = dataBundle.getString("someData"); 
sharedpreferences = getSharedPreferences(MyPREFERENCES, MODE_PRIVATE); 
sharedpreferences.edit().putString("someData", someData); 
sharedpreferences.commit(); 

现在做一个插件,它可以在Web部件后调用已准备好使用。

SharedPreferences sharedpreferences = cordova.getActivity().getSharedPreferences(MyPREFERENCES,cordova.getActivity().MODE_PRIVATE); 
if(sharedpreferences!=null) { 
    String param = sharedpreferences.getString("someData", "-1"); 
    sharedpreferences.edit().remove("someData").commit(); 
    callbackContext.success(param); 
} 

在基于Worklight的混合应用程序的Web侧调用该插件。

function onSuccessSharedData (param) { 
    Param is the passed parameter 
} 
Cordova.exec(onSuccessSharedData, onFailure, "pluginName", "action", []); 
3

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

  1. 使用Simple Data Sharing API
    有了这个API,我不认为你甚至需要尝试从本地视图获取数据并且将其移回web视图中的混合应用程序,它只会在webview中可用。

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

    但我建议:

  2. 使用Action Sender API
    有了这个API,你可以很容易地从网络数据移动到本地或本地到网络。

    在你的情况,你说你已经在本机代码中的数据打开混合应用程序后,你只需要将它移动到网页视图,使所需要的是到:

遗憾的是在这个时候有没有training module可用于具体演示此功能,但会有。

这是为了什么,你需要做的基本前提:

  • 在JavaScript你实现一个接收器:

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

    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); 
    } 
    
    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”的警报的欢迎。

+0

我们使用的是worklight 6.1,那么我可以应用这两种方式吗? – yogesh 2014-09-08 06:38:48

+0

下次在提问时提及您的Worklight版本。不,你不能在6.1中使用它们,因为它们是6.2中的新特性;您可以改为查看WL.NativePage.show API。搜索IBM Worklight 6.1知识中心:http://www-01.ibm.com/support/knowledgecenter/SSZH4A_6.1.0/wl_welcome.html - 同样,升级到6.2 – 2014-09-08 06:42:26

+0

对不起,以前没有提到工作灯版本。据我所知,WL.NativePage.show用于调用本地库。它如何帮助我实现从本地代码到混合代码的数据共享? – yogesh 2014-09-08 06:47:24

相关问题