我想用位置字段保存用户表单信息。对于位置,我想在用户点击地图上的位置和填充后的位置到表单时,在某个按钮点击和位置上打开谷歌地图。
我找到了地方选择器作为相关解决方案,所以 我使用了Place Picker Google API,我可以打开谷歌地图,当我将箭头移到首选位置并单击选择此位置(显示黑色,现在坐标显示在该位置下)。
确认框打开,带有2个选项:
1。)更改位置
2.)选择(禁用模式)
我想选择匿名位置并返回主要活动。
以下是我的代码:
private TextView get_place;
int PLACE_PICKER_REQUEST = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
get_place = (TextView)findViewById(R.id.textView1);
get_place.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
Intent intent;
try {
intent = builder.build(getApplicationContext());
startActivityForResult(intent,PLACE_PICKER_REQUEST );
} catch (GooglePlayServicesRepairableException e) {
e.printStackTrace();
} catch (GooglePlayServicesNotAvailableException e) {
e.printStackTrace();
}
}
});
}
protected void onActivityResult( int requestCode , int resultCode , Intent data ){
if( requestCode == PLACE_PICKER_REQUEST)
{
if(resultCode == RESULT_OK)
{
Place place = PlacePicker.getPlace(data,this);
Double latitude = place.getLatLng().latitude;
Double longitude = place.getLatLng().longitude;
String address = String.valueOf(latitude)+String.valueOf(longitude);
get_place.setText(address);
}
}
}
当前位置坐标不可见
点击SELECT THIS BUTTON后,打开下面的窗口,禁用选择按钮
请告诉我,如果还有其他最佳解决方案。 代码回复将非常有用或参考链接。
答案 0 :(得分:8)
解决方案:从开发控制台启用Google Places API for Android。
答案 1 :(得分:2)
我遇到了同样的问题(请参阅原帖中的评论),原因是AndroidManifest.xml
文件中的API密钥条目不匹配。
我正在使用Xamarin.Android,但原则应该与Java相同 - 但你的里程可能会有所不同。
基本上我的应用程序使用的是Maps API,在我的清单中我将API密钥指定为com.google.android.maps.v2.API_KEY
- 一切正常。当我实现Places Picker时,我需要将密钥名称更改为com.google.android.geo.API_KEY
(我没有必要更改密钥本身!)。我已经为调试配置做了这个,但是没有用于发布配置 - 它仍然使用了Maps键名。因此,构建可释放的包会导致清单满足Maps API而不是Places。
更改发布配置已解决了我的问题。
答案 2 :(得分:0)
我遇到了同样的问题,当我在谷歌云项目中启用了Google Places API for Android API时,它就解决了。
答案 3 :(得分:0)
所有答案都是旧的或不相关的。我尝试了两种解决方案,对我有用。
解决方案1
compile 'com.google.android.gms:play-services:9.4.0'
compile 'com.google.android.gms:play-services-base:9.4.0'
compile 'com.google.android.gms:play-services-appindexing:9.4.0'
compile 'com.google.android.gms:play-services-contextmanager:9.4.0'
compile 'com.google.android.gms:play-services-places:9.4.0'
compile 'com.google.android.gms:play-services-nearby:9.4.0'
compile 'com.google.android.gms:play-services-maps:9.4.0'
compile 'com.google.android.gms:play-services-ads:9.4.0'
compile 'com.google.android.gms:play-services-auth:9.4.0'
compile 'com.google.android.gms:play-services-gcm:9.4.0'
compile 'com.google.android.gms:play-services-analytics:9.4.0'
compile 'com.google.android.gms:play-services-location:9.4.0'
解决方案2
重建,一切运作良好。
答案 4 :(得分:0)
你应该使用这个
<application>
...
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="YOUR_API_KEY"/>
</application>
而不是
<application>
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="YOUR_API_KEY"/>
<application>
答案 5 :(得分:0)
答案 6 :(得分:0)
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode==PLACE_PICKER_REQUEST|requestCode==REQUEST_CHECK_SETTING){
if(resultCode==RESULT_OK) {
mlocationUpdate = true;
// startLocationUpdate();
Place place = PlacePicker.getPlace(data, this);
String str_txt = place.getName().toString();
str_txt += "\n" + place.getAddress().toString();
placeMarkerOnMap(place.getLatLng());
mStringBuilder = new StringBuilder();
String mplacename = String.format("%s", place.getName());
mlatitude = (place.getLatLng().latitude);
mlongitude = (place.getLatLng().longitude);
String maddress = String.format("%s", place.getAddress());
mStringBuilder.append("NAME :");
mStringBuilder.append(mplacename);
mStringBuilder.append("\n");
Log.e("SRC-->",mplacename);
Log.e("THIS-->",maddress);
mStringBuilder.append("ADDRESS :");
mStringBuilder.append(maddress);
/*mStringBuilder.append("\n");*/
if (isPickUp==true){
edt_pickup.setText(mStringBuilder);
isPickUp=false;
}
else if (isDrop==true){
edt_drop.setText(mStringBuilder);
mlatitudeEnd = (place.getLatLng().latitude);
mlongitudeEND = (place.getLatLng().longitude);
isDrop=false;
}
}}
super.onActivityResult(requestCode, resultCode, data);
}