android - PlacePicker 立即关闭,从 Places SDK for Android 迁移到 Google Places API 导致错误
问题描述
我使用的是旧的 Places SDK for Android,但现在它已经贬值了,所以我尝试使用谷歌的新 Places SDK。我使用与兼容库相同的代码,但一次又一次地出现一些错误。
我正在尝试在我的应用程序中使用 Placepicker。我已经为它创建了一个 API 密钥并添加到我的字符串中。但是当我打开地点选择器时,它会因日志而崩溃
Timeline: Activity_launch_request time:126708460 intent:Intent {
act=com.google.android.gms.location.places.ui.PICK_PLACE
pkg=com.google.android.gms (has extras) }
W/IInputConnectionWrapper: reportFullscreenMode on inexistent InputConnection
我已经在控制台中启用了我的 api,并且我已经仔细检查了它存在的 api 密钥。我很困惑这里有什么问题。
这就是我正在做的事情,我正在使用谷歌文档中提到的下面的库来使用 placepicker,因为它已经被贬值了。
implementation 'com.google.android.libraries.places:places-compat:1.1.0'
其次,我也在导入文档中提到的以下类
import com.google.android.libraries.places.compat.Place;
import com.google.android.libraries.places.compat.ui.PlacePicker;
最后,我在按钮的单击事件上调用 placekicker
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showPlacePicker();
}
});
在我的 showPlacePicker
int PLACE_PICKER_REQUEST = 1;
private void showPlacePicker() {
PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
try {
startActivityForResult(builder.build(this), PLACE_PICKER_REQUEST);
} catch (Exception e) {
Log.e("error", e.getStackTrace().toString());
}
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == PLACE_PICKER_REQUEST) {
if (resultCode == RESULT_OK) {
Place place = PlacePicker.getPlace(data, this);
LatLng latLng = place.getLatLng();
lat = latLng.latitude;
lng = latLng.longitude;
setAddress();
}
}
}
public void setAddress(){
Geocoder geocoder = new Geocoder(this, Locale.getDefault());
try {
List<Address> addressList = geocoder.getFromLocation(
lat, lng, 1);
if (addressList != null && addressList.size() > 0) {
Address address = addressList.get(0);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < address.getMaxAddressLineIndex(); i++) {
sb.append(address.getAddressLine(i)).append("\n");
}
sb.append(address.getFeatureName()).append(", ");
sb.append(address.getSubLocality()).append(", ");
sb.append(address.getAdminArea()) ;
Toast.makeText(this, "admin area"+address.getAdminArea(), Toast.LENGTH_SHORT).show();
locationText.setText(result);
}
} catch (IOException e) {
Log.e("Address is ", "Unable connect to Geocoder", e);
}
}
有人可以告诉我这里出了什么问题吗?我在这里有点困惑,我在这里没有得到太多信息。我已经按照谷歌上的步骤获取密钥并查看了教程。但我仍然无法解决这个问题。
解决方案
请注意,地点选择器已于 2019 年 1 月 29 日弃用。此功能将于 2019 年 7 月 29 日关闭,并且在该日期之后将不再可用。请注意,在弃用期间,只有使用 Places SDK for iOS/Android 的老用户仍然可以使用 Place Picker。两个平台的 Places SDK 的使用现在通过启用 Places API 并且不再支持使用 Place Picker。您可能会在https://developers.google.com/places/android-sdk/placepicker中看到弃用通知。
除此之外,Google 正在对用户使用 Place Picker 的驱动因素进行审查,如果您有兴趣,请在本期提到的表格中添加您的答案。
推荐阅读
- python - 检查时间间隔内所选时间的输入
- serial-port - Pyvmomi 获取端口组的 CRUD 操作
- google-chrome-extension - 注入 Chrome 扩展内容脚本的最低权限
- python-3.x - Python Panda Dataframe 替换列中的值
- javascript - 不和谐.js | 如何制作在用户加入时发送用户信息的代码?
- cmake - 隐藏
和 Qt Creator 中的 CMake 模块 - javascript - 从原始 json 获取不存在的数据并将其附加到表中
- css - 在 SASS 中为 3 个嵌套块使用根类名
- datetime - TAI 时间可以用 ISO 8601 表示吗?如果可以,如何表示?
- maui - http 链接可以在 MAUI Windows 应用程序中打开特定窗口吗?