Cordova сама не раскрывает свои свойства веб-просмотра публично для использования другими классами Java, но вы можете сделать это с помощью минимального плагина Cordova, который позволит вашей фоновой службе получить доступ к веб-представлению Cordova для выполнения в нем javascript изСлой Java.Тогда это просто вопрос внедрения JS для запуска события.
Сначала вы создадите плагин Cordova, чтобы предоставить необходимые элементы Cordova вашей фоновой службе:
public class MyPlugin extends CordovaPlugin{
private static final String TAG = "MyPlugin";
static MyPlugin instance = null;
static CordovaWebView cordovaWebView;
static CordovaInterface cordovaInterface;
@Override
public void initialize(CordovaInterface cordova, CordovaWebView webView) {
super.initialize(cordova, webView);
instance = this;
cordovaWebView = webView;
cordovaInterface = cordova;
}
@Override
public void onDestroy() {
instance = null;
}
private static void executeGlobalJavascript(final String jsString) {
if (instance == null) {return;}
instance.cordovaInterface.getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
try {
instance.cordovaWebView.loadUrl("javascript:" + jsString);
} catch (Exception e) {
Log.e(TAG, "Error executing javascript: "+ e.toString());
}
}
});
}
public static void triggerJavascriptEvent(final String eventName){
executeGlobalJavascript(String.format("document.dispatchEvent(new Event('%s'));", eventName));
}
}
Затемваша фоновая служба может вызывать открытый метод, предоставляемый этим классом плагина:
public class MyService {
public static void myMethod(){
MyPlugin.triggerJavascriptEvent("myserviceevent");
}
}
И, наконец, в слое JS вашего приложения Cordova вы будете прослушивать собственное событие:
document.addEventListener('myserviceevent', function(){
console.log("myserviceevent received");
}, false);
Я создал пример проекта Cordova, который содержит минимальные пользовательские плагины, необходимые для достижения этого, который вы можете скачать здесь: http://ge.tt/8UeL6lu2
После загрузки распакуйте, а затем:
cd cordova-test
cordova platform add android
cordova run android