我当时使用的是Android的旧版Places SDK,但现在它已贬值,因此我尝试使用Google的新版Places SDK。 我在compat库中使用了相同的代码,但是一次又一次出错。
我正在尝试在我的应用中使用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密钥。我很困惑这里出了什么问题。
这就是我正在做的事,我使用的是Google文档中提到的以下库,因为它已贬值,所以要使用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;
最后,我在按钮的点击事件中调用了投放机
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);
}
}
有人可以告诉我这里有什么问题吗?我在这里有点困惑,我在这里没有太多的信息。我已经按照Google上有关获取密钥的步骤进行操作,还看到了教程。但是我仍然有能力解决这个问题。
答案 0 :(得分:2)
请注意,地点选择器自2019年1月29日起已过时。此功能将在2019年7月29日关闭,在该日期之后将不再可用。请注意,使用iOS / Android上的Places SDK的旧用户是唯一在弃用期间仍可以使用Place Picker的用户。现在已通过启用Places API在两个平台上使用Places SDK,并且不再支持使用Place Picker。您可能会在https://developers.google.com/places/android-sdk/placepicker中看到弃用通知。
除此之外,Google正在对促使用户使用位置选择器的因素进行审查,如果您有兴趣的话,请以此issue中提到的形式添加您的答案。