我正在实施Google 的路线 API https://developers.google.com/maps/documentation/directions/start。我的应用程序支持minSdkVersion 23
and 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();
Error:
调用需要 API 级别 26(当前最低为 23):java.time.Instant#now
less... (Ctrl+F1) 检查信息:此检查扫描所有
应用程序中的 Android API 调用并对任何调用发出警告
不适用于此应用程序的所有目标版本
(根据清单中的最小 SDK 属性)。如果你
确实想使用这个 API 并且不需要支持旧设备
只需在 build.gradle 或 AndroidManifest.xml 中设置 minSdkVersion
文件。如果您的代码有意访问较新的 API,并且您
已确保(例如通过条件执行)该代码将
仅在受支持的平台上调用,然后您可以注释
您的类或方法,带有 @TargetApi 注释指定
要应用的本地最小 SDK,例如@TargetApi(11),这样
检查将 11 而不是清单文件的最小 SDK 视为
所需的 API 级别。如果你故意设置android:
样式定义中的属性,请确保将其放在
value-vNN 文件夹以避免遇到运行时冲突
制造商添加了自定义属性的某些设备
id 与后续平台上的新 id 冲突。同样,您可以
在 XML 文件中使用 tools:targetApi="11" 来指示该元素
只有在适当的情况下才会被夸大。问题 ID:NewApi
如果您使用 Gradle 插件 4.0 或更高版本(搭配 Android Studio 4.0 或更高版本),则可以利用 D8 Core Library Desugaring。这包括以下功能的子集java.time
并且将允许您使用java.time.Instant
在你的项目中;即使您需要支持早于 API 26 的版本。
在你的模块中build.gradle
file:
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 样式 https://blog.stylingandroid.com/d8-desugaring/
- 杰克·沃顿 https://jakewharton.com/d8-library-desugaring/
- 安卓开发者 https://developer.android.com/studio/command-line/d8#j8
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)