1. Javascript file ------ calls -------> CORDOVA PLUGIN(plugin.java)
2. CORDOVA PLUGIN(plugin.java) file -------calls-------> Android BroadcastReceiver file(Broadcast_Receiver.java)
Broadcast_Receiver.java包含onResume 如何从Javascript文件中调用/启动它?
请参阅底部的示例代码
问题#1:我无法组合plugin.java和amp; Broadcast_Receiver.java因为它们正在扩展CordovaPlugin& WLDroidGap分别。
问题#2:当我在worklight应用程序的页面之间导航时;因为onResume是原生Android代码,所以Broadcast_Receiver.java的onResume永远不会被触发
我无法实施的可能解决方案:
document.addEventListener("resume", function() { });
简而言之:如何使用Cordova插件启动android生命周期?
示例代码
Javascript文件调用插件
//some code
currentPage.myfunction= function() {
cordova.exec(Success, Failure, "plugin","someMETHOD", []);
}
plugin.java
public class plugin extends CordovaPlugin
{
//some code
float value= Broadcast_Receiver.Variable_Name;
//some code
}
Broadcast_Receiver.java
public class roamingadvisor extends WLDroidGap {
//some code
onCreate(){}
onResume(){}
onPause(){}
//some code
}
我想要实现的目标
我的应用程序一旦收到广播数据被激活就开始计算数据使用情况
我可以计算数据使用量 一旦我按下主页按钮&重新启动我的应用程序(即在android中触发原生onResume)
但是当我继续使用我的应用程序时(即在UI屏幕之间导航)本机android onResume永远不会被触发
或者
我应该使用完全不同的方法吗?
*******R&D *******
我在下面使用了两个链接
https://apache.googlesource.com/cordova-android/+/2.6.x/framework/src/org/apache/cordova/Device.java
https://github.com/apache/cordova-android/blob/master/framework/src/org/apache/cordova/CordovaPlugin.java
并为我的需要编写了以下代码
public class Myclass extends CordovaPlugin {
IntentFilter intentFilter = new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE");
boolean multitasking=true;
BroadcastReceiver mReceiver=null;
//constructor
public MyDataUsage(){
}
public void initialize(CordovaInterface cordova, CordovaWebView webView) {
super.initialize(cordova, webView);
//Device.uuid = getUuid();
this.initReceiver();
}
@Override
public void onPause(boolean multitasking) {
super.onPause(multitasking);
this.cordova.getActivity().unregisterReceiver(this.mReceiver);
}
@Override
public void onResume(boolean multitasking) {
super.onResume(multitasking);
this.cordova.getActivity().registerReceiver(this.mReceiver, intentFilter);
}
public void onDestroy() {
this.cordova.getActivity().unregisterReceiver(this.mReceiver);
}
private void initReceiver() {
this.mReceiver=new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
ctb=context;
if (intent.getAction().equals("android.net.conn.CONNECTIVITY_CHANGE"))
{
//My code
}
}
}
};
this.cordova.getActivity().registerReceiver(this.mReceiver, intentFilter);
}
public boolean execute(String action, JSONArray arr,
final CallbackContext callbackcontext) throws JSONException {
if (action.equals("getDataUsage")) {
try {
//code
callbackcontext.success(""+dataUsed+ ":" +timeElapsed+":"+StartTime);
} catch (Exception e) {
callbackcontext.error("ERROR :");
}
return true;
}
return false;
}
}
但onPause& onResume只有在我按HOME键和时才会被调用RELAUNCH我的APP
Should i CONCLUDE that " I can not implement ACTIVITY LIFECYCLE while naviagting in my UI/html SCREEN/pages" ???
答案 0 :(得分:4)
默认情况下,Cordova应用程序由一个托管单个WebView的Activity组成。当您在Web中导航页面/更改内容时,您将无法从Activity获取任何生命周期事件,因为从技术上讲,您仍处于同一活动的上下文中。
请注意,CordovaPlugin类具有许多Activity生命周期方法的回调,您可以利用它们(https://github.com/apache/cordova-android/blob/master/framework/src/org/apache/cordova/CordovaPlugin.java)。例如,使用initialize()方法开始计算,使用onDestroy()方法检测应用程序何时关闭。您还可以根据您尝试实现的逻辑使用其他CordovaPlugin方法,如onResume()和onPause()。