Запуск JavaScript-события от Android - PullRequest
0 голосов
/ 01 марта 2019

Я создал приложение Cordova.Я запускаю фоновый сервис для выполнения какой-то родной задачи в приложении.Мне нужно вызвать событие java-script, как только фоновая служба выполнит свою задачу.Можно ли вызвать JS события с Android ?.Не удалось найти каких-либо убедительных ответов на этот вопрос.Мне нужны события, потому что приложение завелось, чтобы дождаться завершения задачи в фоновом режиме.Я хочу, чтобы событие уведомило приложение, что задача выполнена.Есть ли лучший способ реализовать эту логику?

1 Ответ

0 голосов
/ 01 марта 2019

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...