当前位置: 首页 > 知识库问答 >
问题:

调用需要API级别26(当前最小值为23):java。时间立即#现在

景宏朗
2023-03-14

我正在实现谷歌的方向API。我的应用程序支持minSdkVersion 23java。时间此处不支持即时

是否有解决方案,或者我应该检查用户的版本,并允许此功能(如果其版本受支持)?

    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。时间瞬间#现在少了。。。(Ctrl-F1)检查信息:此检查扫描应用程序中的所有Android API调用,并警告此应用程序针对的所有版本上不可用的任何调用(根据清单中的最小SDK属性)。如果你真的想使用这个API,并且不需要支持旧设备,只需在你的构建中设置minSdkVersion。格拉德尔或安德烈。xml文件。如果您的代码有意访问较新的API,并且您已确保(例如,通过条件执行)此代码只会在受支持的平台上被调用,那么您可以使用@TargetApi注释对您的类或方法进行注释,指定要应用的本地最小SDK,例如@TargetApi(11),这样,该检查将11而不是清单文件的最低SDK视为所需的API级别。如果有意在样式定义中设置android:attributes,请确保将其放置在values vNN文件夹中,以避免在某些设备上遇到运行时冲突,因为制造商在这些设备上添加了自定义属性,其ID与更高平台上的新属性冲突。类似地,您可以在XML文件中使用tools:targetApi=“11”来指示元素将仅在适当的上下文中膨胀。问题编号:NewApi

共有3个答案

呼延光明
2023-03-14

JAVA时间在旧的和新的Android设备上都能很好地工作。它至少需要Java6。

  • 在Java8和更高版本以及更新的Android设备上(从API级别26),现代API内置。
  • 在非AndroidJava6和7获取Threeten Backport,现代类的Backport(JSR 310的Threeten;请参阅底部的链接)。
  • 在(旧的)Android上使用Android版的Threeten Backport。它叫做ThreeTenABP。并确保您从带有子包的org.threeten.bp导入日期和时间类。
  • Oracle教程:解释如何使用java.time.日期时间
  • Java规范请求(JSR)310,其中首次描述了java.time
  • Threeten Backport项目,是java.time到Java6和7的Backport(用于JSR-310的Threeten)。
  • ThreeTenABP, Android版的Threeten Backport
  • 问题:如何在Android项目中使用ThreeTenABP,有一个非常彻底的解释。
吕英才
2023-03-14

在阅读了《开发者指南》之后,发现要么Stringnow

以及常见的intUNIX历元时间戳,都是可接受的值:

出发时间-指定所需的出发时间。从UTC 1970年1月1日午夜起,可以将时间指定为以秒为单位的整数。或者,您可以指定一个值now,该值将出发时间设置为当前时间(精确到最接近的秒)。

在检查Java客户端的源代码时,有一种方便的方法:

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

因此java.time.Instant可以被规避,以实现向后兼容。

我已经提交了第559期...分叉库似乎是设置其他时间戳的唯一方法。

谯皓君
2023-03-14

如果您使用的是Gradle插件4.0或更高版本(Android Studio 4.0或更高版本),那么您可以利用D8核心库Desugaring。这包括java中的一部分功能。时间将允许您使用java。时间项目中的即时;即使您需要支持早于API 26的版本。

在模块的构建中。gradle文件

android {

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
        coreLibraryDesugaringEnabled true
    }

    // If using Kotlin
    kotlinOptions {
        jvmTarget = JavaVersion.VERSION_1_8
    }
}
dependencies {
    …
    coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.5'
}

您现在应该可以无错误地使用这个类了。

一些来源:

  • 造型Android
  • 杰克·沃顿
  • Android开发者
 类似资料: