我正在尝试在我的应用程序中使用谷歌放置自动完成。
就像文档中描述的那样,有两种方法可以使用此功能:一种使用片段,另一种方法是使用 Intent,这就是我选择的。
我的代码如下
摇篮:
implementation 'com.google.android.libraries.places:places:2.5.0'
科特林:
第 1 部分
btn.setOnClickListener {
if (!Places.isInitialized()) {
Places.initialize(
requireActivity().applicationContext,
getString(R.string.google_maps_key)
)
}
@Suppress("DEPRECATION")
startActivityForResult(
Autocomplete
.IntentBuilder(
AutocompleteActivityMode.OVERLAY,
listOf(
Place.Field.ID,
Place.Field.NAME,
Place.Field.LAT_LNG,
Place.Field.ADDRESS,
Place.Field.ADDRESS_COMPONENTS
)
).build(requireContext()),
AUTOCOMPLETE_REQUEST_CODE
)
}
第 2 部分
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (requestCode == AUTOCOMPLETE_REQUEST_CODE) {
when (resultCode) {
Activity.RESULT_OK -> {
data?.let {
val place = Autocomplete.getPlaceFromIntent(data)
Timber.i(TAG, "Place: ${place.name}, ${place.id}")
}
}
AutocompleteActivity.RESULT_ERROR -> {
// TODO: Handle the error.
data?.let {
val status = Autocomplete.getStatusFromIntent(data)
Timber.i(TAG, status.statusMessage)
}
}
Activity.RESULT_CANCELED -> {
// The user canceled the operation.
}
}
return
}
super.onActivityResult(requestCode, resultCode, data)
}
覆盖的“地点自动完成”视图显示完美,但是当我尝试用胶带粘贴键盘来搜索某个地方时,视图崩溃而不是应用程序崩溃。只有视图,我收到下面的错误(我不知道它是否相关):
set_timerslack_ns write failed: Operation not permitted
知道如何解决这个问题吗?
您是否“启用”了您的 api 密钥以使用 google 地点?
对我来说,需要启用 Places API(新)以及 Places API。检查 logcat 日志以获取可能的额外信息。