[英]How to achieve interaction between Native and Hybrid Applications in Worklight?
我將首先解釋我試圖實現的用例。 我有兩個不同的應用程序:
用例從打開本機android應用程序開始。 在特定事件中,我使用一些參數打開Hybrid應用程序。
在Hybrid應用程序中,我在本機端獲取傳遞的參數,現在我想在應用程序的webview中使用該數據(JavaScript,HTML)。 我怎樣才能做到這一點?
例如:
我打開了第一個android應用程序。 其中有一個文本框和一個按鈕。 我在文本框中輸入了我的手機號碼並點擊了按鈕。 在按鈕上單擊我有代碼啟動其他混合應用程序並傳遞移動號碼。
我能夠在代碼的本機端提取該移動數字參數。 如何將其傳遞給Web(JavaScript)部分?
任何幫助將不勝感激。
如果您使用的是Worklight 6.2,則可以通過兩種方式實現此目的。
使用簡單數據共享API
使用此API,我認為您甚至不需要嘗試從本機視圖中獲取數據並將其移回到混合應用程序中的webview,它將在webview中可用。
在這個答案中解釋概念和執行將使它太長; 我建議先查看文檔,看看它是否符合您的需求。
但我建議:
使用Action Sender API
使用此API,您可以輕松地將數據從Web移動到本機或本機到Web。
在您的情況下,您說在打開混合應用程序后您已經擁有本機代碼中的數據,並且您只需要將其移動到webview,因此需要的是:
不幸的是,目前還沒有可用於演示此功能的培訓模塊 ,但會有。
這是您需要做的基本前提:
在JavaScript中,您實現了一個接收器:
function wlCommonInit(){ WL.App.addActionReceiver ("doSomething", actionReceiver); } function actionReceiver(received){ // Do something with the received data. alert (received.data.someProperty); }
在Hybrid應用程序的主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”的警報。
我將使用代碼片段描述解決方案。
首先從本機應用程序打開混合應用程序。
Intent intent = getPackageManager().getLaunchIntentForPackage(“URI Of Target Application”);
intent.putExtra("someData", someData);
startActivity(intent);
現在,基於Worklight的混合應用程序將啟動,從本機部分開始,我們將提取傳遞的數據並將其存儲在共享首選項中:
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", []);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.