【发布时间】:2017-03-30 05:35:06
【问题描述】:
有谁知道如何在 Android Studio 中实现 Google Place Picker API?试过教程,不成功。我想要一个显示位置的工作自动完成文本字段,当您单击该位置时,它将显示在 Google 地图片段中。
【问题讨论】:
标签: java android google-maps google-places-api
有谁知道如何在 Android Studio 中实现 Google Place Picker API?试过教程,不成功。我想要一个显示位置的工作自动完成文本字段,当您单击该位置时,它将显示在 Google 地图片段中。
【问题讨论】:
标签: java android google-maps google-places-api
将依赖项添加到 yourbuild.gradle(将 <version-number> 替换为您想要的版本,例如,Gradle, Please):
compile "com.google.android.gms:play-services-places:<version-number>"
将您的密钥添加到您的AndroidManifest.xml:
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="@string/map_api_key"/>
您的 Activity/Fragment 需要这些属性和方法:
private final static int PLACE_PICKER_REQUEST = 999;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
checkPermissionOnActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
switch (requestCode){
case PLACE_PICKER_REQUEST:
Place place = PlacePicker.getPlace(this, data);
String placeName = String.format("Place: %s", place.getName());
double latitude = place.getLatLng().latitude;
double longitude = place.getLatLng().longitude;
}
}
}
最后,这是打开PlacePicker的代码
PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
try {
// for activty
startActivityForResult(builder.build(this), PLACE_PICKER_REQUEST);
// for fragment
//startActivityForResult(builder.build(getActivity()), PLACE_PICKER_REQUEST);
} catch (GooglePlayServicesRepairableException e) {
e.printStackTrace();
} catch (GooglePlayServicesNotAvailableException e) {
e.printStackTrace();
}
【讨论】:
在 Button clicklistner 或您要打开 PlacePicker 的地方调用此方法:
private final static int PLACE_PICKER_REQUEST = 111;
private void openPlacePicker() {
PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
try {
// for activty
startActivityForResult(builder.build(this), PLACE_PICKER_REQUEST);
// for fragment
//startActivityForResult(builder.build(getActivity()), PLACE_PICKER_REQUEST);
} catch (GooglePlayServicesRepairableException e) {
e.printStackTrace();
} catch (GooglePlayServicesNotAvailableException e) {
e.printStackTrace();
}
}
并在ActivityResult上获取结果:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
switch (requestCode) {
case PLACE_PICKER_REQUEST:
Place place = PlacePicker.getPlace(this, data);
String placeName = String.format("Place: %s", place.getName());
double latitude = place.getLatLng().latitude;
double longitude = place.getLatLng().longitude;
LatLng coordinate = new LatLng(latitude, longitude);
MarkerOptions markerOptions = new MarkerOptions();
markerOptions.position(coordinate);
markerOptions.title(placeName); //Here Total Address is address which you want to show on marker
mGoogleMap.clear();
markerOptions.icon(
BitmapDescriptorFactory
.defaultMarker(BitmapDescriptorFactory.HUE_BLUE));
markerOptions.getPosition();
mCurrLocationMarker = mGoogleMap.addMarker(markerOptions);
mGoogleMap.moveCamera(CameraUpdateFactory.newLatLng(coordinate));
mGoogleMap.animateCamera(CameraUpdateFactory.zoomTo(15));
}
}
}
【讨论】: