Ich möchte Benutzerformularinformationen mit Standortfeld speichern. Für den Standort möchte ich Google Map mit einem Klick auf eine Schaltfläche öffnen und den Standort auswählen, wenn der Benutzer auf den Standort über der Karte und den nachgefüllten Standort in das Formular klickt.
Ich habe Place Picker als verwandte Lösung gefunden. Daher habe ich die Place Picker-Google-API verwendet und kann Google Map öffnen, wenn ich den Pfeil über den gewünschten Ort bewege und auf Diesen Ort auswählen (schwarze Farbe mit jetzt angezeigten Koordinaten) ) .
Das Bestätigungsfeld wird mit 2 Optionen geöffnet:
1.) Standort wechseln
2.) Wählen Sie (Deaktivierter Modus)
Ich möchte einen anonymen Ort auswählen und zur Hauptaktivität zurückkehren.
Unten ist mein Code:
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);
}
}
}
Aktuelle Ortskoordinaten nicht sichtbar
.
Nachdem Sie auf SELECT THIS BUTTON geklickt haben, wird das folgende Fenster geöffnet, wobei Select deaktiviert ist
.
Bitte lassen Sie mich wissen, ob es eine andere beste Lösung gibt. Die Antwort auf den Code ist sehr hilfreich oder ein Referenzlink.
Lösung: Aktivieren Sie Google Places API für Android von der Entwicklerkonsole.
Ich hatte das gleiche Problem (siehe Kommentare im ursprünglichen Beitrag) und es stellte sich heraus, dass es durch eine Nichtübereinstimmung im API-Schlüsseleintrag in der AndroidManifest.xml
-Datei verursacht wurde.
Ich verwende Xamarin.Android, aber das Prinzip sollte in Java dasselbe sein - aber Ihre Laufleistung kann variieren.
Grundsätzlich verwendete meine App die Maps-API und in meinem Manifest wurde der API-Schlüssel als com.google.Android.maps.v2.API_KEY
angegeben - und alles funktionierte einwandfrei. Als ich den Places Picker implementiert habe, musste ich den Schlüsselnamen in com.google.Android.geo.API_KEY
ändern (ich musste den Schlüssel NICHT selbst ändern!). Ich hatte dies für die Debug-Konfiguration getan, aber NICHT für die Release-Konfiguration - die immer noch den Namen des Maps-Schlüssels verwendete. Daher führte das Erstellen eines freigebbaren Pakets zu einem Manifest, das die Google Maps-API, jedoch nicht die Google Places-API erfüllt.
Das Ändern der Release-Konfiguration hat mein Problem behoben.
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);
}
Alle Antworten sind entweder alt oder irrelevant. Ich habe 2 Lösungen ausprobiert, die für mich funktionierten.
Lösung 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'
Referenz: googledocumentation
Lösung 2
Wiederaufbau und alles funktioniert gut.
Sie sollten dies verwenden
<application>
...
<meta-data
Android:name="com.google.Android.geo.API_KEY"
Android:value="YOUR_API_KEY"/>
</application>
anstatt
<application>
<meta-data
Android:name="com.google.Android.maps.v2.API_KEY"
Android:value="YOUR_API_KEY"/>
<application>
Ich hatte das gleiche Problem und es wurde behoben, als ich Google Places API für Android API in meinem Google Cloud-Projekt aktivierte.