2014-09-06 64 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

相關問題