为了账号安全,请及时绑定邮箱和手机立即绑定

调用需要 API 级别 26(当前最小值为 23):即时

调用需要 API 级别 26(当前最小值为 23):即时

蓝山帝景 2022-09-22 20:11:04

我正在实现谷歌的方向API。我的应用支持,但此处不受支持。minSdkVersion 23java.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.时间。即时#现在更少...(按右键 +F1)检查信息:此检查会扫描应用程序中的所有 Android API 调用,并警告在此应用程序所针对的所有版本上不可用的任何调用(根据清单中其最小 SDK 属性)。如果您真的想使用此API并且不需要支持较旧的设备,只需在build.gradle或安卓智能体中设置minSdkVersion.xml文件即可。如果您的代码故意访问较新的 API,并且您已确保(例如,使用条件执行)此代码只会在受支持的平台上调用,那么您可以使用@TargetApi注释来注释您的类或方法,该注释指定要应用的本地最小 SDK,例如 @TargetApi(11),以便此检查将 11 而不是清单文件的最低 SDK 视为必需的 API 级别。如果您有意在样式定义中设置android:属性,请确保将其放在value-vNN文件夹中,以避免在某些设备上遇到运行时冲突,其中制造商添加了自定义属性,其ID与更高平台上的新属性冲突。同样,您可以在 XML 文件中使用工具:targetApi=“11”来指示元素只会在适当的上下文中膨胀。问题 ID: 新锐


查看完整描述

4 回答

?
catspeake

TA贡献766条经验 获得超0个赞

如果您使用的是 Gradle 插件 4.0 或更高版本(适用于 Android Studio 4.0 或更高版本),则可以利用 D8 核心库解压功能。这包括 中找到的功能子集,并允许您在项目中使用;即使您需要支持早于 API 26 的版本。java.timejava.time.Instant


在模块的文件中:build.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'

}

您现在应该能够无差错地使用此类。


查看完整回答
反对 回复 2022-09-22
?
HUH函数

TA贡献1492条经验 获得超1个赞

在查看开发人员指南后,事实证明,Stringnow

以及常见的 UNIX 纪元时间戳,都是可接受的值:int

departure_time— 指定所需的出发时间。您可以将时间指定为自 1970 年 1 月 1 日午夜 UTC 以来的整数(以秒为单位)。或者,您可以指定值 ,该值将出发时间设置为当前时间(更正为最接近的秒)。now

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

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

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


我已提交问题 #559...分叉库似乎是设置其他时间戳的唯一方法。


查看完整回答
反对 回复 2022-09-22
?
眼眸繁星

TA贡献1551条经验 获得超9个赞

您可以在安卓 API 级别 23 上使用即时类和 Java.time 中的其他类

java.time在较旧的和较新的安卓设备上都运行良好。它只需要至少 Java 6

  • 在 Java 8 及更高版本以及较新的 Android 设备(从 API 级别 26 开始)上,内置了现代 API。

  • 在非Android Java 6和7中获取三十个反向移植,即现代类的向后移植(三十个用于JSR 310,请参阅底部的链接)。

  • 在(较旧的)安卓版上使用安卓版的三十号向后移植。它被称为三十二。并确保从子包中导入日期和时间类。org.threeten.bp

链接


查看完整回答
反对 回复 2022-09-22
?
慕无忌1623718

TA贡献1429条经验 获得超3个赞

我在这里写了关于解决此问题的推荐方法:https://dev.to/cicerohellmann/what-is-desugaring-and-why-would-i-need-it-2bo0

但简而言之,你应该使用去苏加,它允许你在较低级别使用一些高级API。值得一试。我还添加了所有链接,以找到如何实现它以及一些商品和坏处。


查看完整回答
反对 回复 2022-09-22

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信