Как из Аndroid запустить JavaScript с запросом к Yandex.картам?

У меня есть GPS-координаты точек маршрута.

Нужно по ним вычислить длину и продолжительность маршрута.

Это можно сделать с помощью javascript-кода: сделать запрос к API Yandex.карт, пример здесь: https://yandex.ru/dev/maps/jsapi/doc/2.1/dg/concepts/router/multiRouter.html/#multiRouter__get-active-route

Я нашел способ запускать javascript-код из Android-а с помощью WebView: разместил на форме WebView с JavaScript-кодом, при загрузке WebView запускается javascript, запрос нормально отрабатывает.

Но я не нашёл способ передачи параметров (gps-координат) в JavaScript и взятия response-а сервера (response просто выводится в консоль).

Еще пытался запускать JavaScript-код через okhttp, но так и не понял можно ли это сделать.

Собственно вопрос:

  1. Как передать параметры в JavaScript?
  2. Как получить response сервера (при выполнении javascript-а)?

Код в xml-файле:

<WebView
    android:id="@+id/web_view"
    android:layout_width="match_parent"
    android:layout_height="100dp"
    app:layout_constraintTop_toTopOf="parent"
    >
</WebView>

код во фрагменте:

web_view.settings.javaScriptEnabled = true
web_view.loadUrl("file:///android_asset/www/index.html")
    

файл assets/www/index.html:

<meta charset="utf-8">
<script src="https://api-maps.yandex.ru/2.1/?apikey=20cdc3d8-1eb7-4f99-839d-f2bf9456b2c1&lang=ru_RU" type="text/javascript"></script>
<div id="map" style="width:450px;height:300px"></div>
<script src="app.js"></script>

файл assets/www/app.js:

ymaps.ready(function () {
    var myMap = new ymaps.Map('map', {
        center: [55.753994, 37.622093],
        zoom: 9,
        controls: []
    });

    // Создание маршрута.
    var multiRoute = new ymaps.multiRouter.MultiRoute({
        referencePoints: [
            [55.734876, 37.59308],
            [55.761184, 37.57850]
        ]
    }, {
        boundsAutoApply: true
    });

    // Добавление маршрута на карту.
    myMap.geoObjects.add(multiRoute);

    // Подписка на событие обновления данных маршрута.
    multiRoute.model.events.add('requestsuccess', function() {
        // Получение ссылки на активный маршрут.
        // В примере используется автомобильный маршрут,
        // поэтому метод getActiveRoute() вернет объект multiRouter.driving.Route.
        var activeRoute = multiRoute.getActiveRoute();
        // Вывод информации о маршруте.
        console.log("Длина: " + activeRoute.properties.get("distance").text);
        console.log("Время прохождения: " + activeRoute.properties.get("duration").text);
        // Для автомобильных маршрутов можно вывести
        // информацию о перекрытых участках.
        if (activeRoute.properties.get("blocked")) {
            console.log("На маршруте имеются участки с перекрытыми дорогами.");
        }
    });
    // Добавление маршрута на карту.
    myMap.geoObjects.add(multiRoute);
});

Ответы (0 шт):