Для вызова требуется уровень API 26 (текущий минимум 23): java.time.Instant # сейчас - PullRequest
0 голосов
/ 06 апреля 2019

Я использую Google Directions API .Мое приложение поддерживает minSdkVersion 23 и java.time.Instant здесь не поддерживается.

Есть ли решение для этого, или я должен просто проверить версию пользователя и разрешить эту функцию, если его версия поддерживается?

    DirectionsResult directionsResult = DirectionsApi.newRequest(geoApiContext)
            .mode(TravelMode.DRIVING)
            .origin(new com.google.maps.model.LatLng(mapFragment.getUserCoords().latitude, mapFragment.getUserCoords().longitude))
            .destination(tabHandlerCommunication.destinationBarCoords)
            .departureTime(Instant.now()) // <-- error here
            .await();

Ошибка:

Для вызова требуется API-уровень 26 (текущий минимум - 23): java.time.Instant # теперь меньше ... (Ctrl + F1) Информация о проверке: эта проверка сканируетчерез все вызовы Android API в приложении и предупреждает о любых вызовах, которые недоступны во всех версиях, на которые нацелено это приложение (согласно его минимальному атрибуту SDK в манифесте).Если вы действительно хотите использовать этот API и не нуждаетесь в поддержке старых устройств, просто установите minSdkVersion в ваших файлах build.gradle или AndroidManifest.xml.Если ваш код преднамеренно обращается к новым API, и вы гарантировали (например, при условном выполнении), что этот код будет вызываться только на поддерживаемой платформе, тогда вы можете аннотировать свой класс или метод с помощью аннотации @TargetApi, определяющей локальный минимальный SDKприменить, например @TargetApi (11), чтобы эта проверка учитывала 11, а не минимальный SDK вашего файла манифеста в качестве требуемого уровня API.Если вы намеренно устанавливаете атрибуты android: в определениях стилей, убедитесь, что вы поместили их в папку values-vNN, чтобы избежать конфликтов во время выполнения на определенных устройствах, где производители добавили пользовательские атрибуты, чьи идентификаторы конфликтуют с новыми на более поздних платформах.,Точно так же вы можете использовать tools: targetApi = "11" в файле XML, чтобы указать, что элемент будет раздуваться только в соответствующем контексте.Идентификатор проблемы: NewApi

Ответы [ 2 ]

2 голосов
/ 07 апреля 2019

После просмотра руководства разработчика оказалось, что либо String now,

, а также обычные int метки времени эпохи UNIX, являются допустимыми значениями:

departure_time - указывает желаемое время отправления. Вы можете указать время как целое число в секундах с полуночи 1 января 1970 года по Гринвичу. Кроме того, вы можете указать значение now, которое устанавливает время отправления на текущее время (с точностью до секунды).

При проверке исходного кода клиента Java для этого есть удобный метод:

public DirectionsApiRequest departureTimeNow() {
    return param("departure_time", "now");
}

Поэтому java.time.Instant можно обойти для обратной совместимости.


Я подал выпуск # 559 ... кажется, что разветвление библиотеки - единственный способ установить другие метки времени.

0 голосов
/ 06 апреля 2019

Нет другого способа сделать это. Вы не можете использовать API, для которого требуется более высокая версия SDK с более низкой.

Необходимо изменить свойство minSdkVersion на уровне приложения build.gradle с 23 файла до 26.

...