Ich habe Probleme mit Android Google Places API - Funktion zur automatischen Vervollständigung. Ich verwende denselben Schlüssel, den ich für Android Google Maps API (und in der Dokumentation, es steht geschrieben das ist ok) Hier ist meine Definition in Manifest:
<meta-data
Android:name="com.google.Android.geo.API_KEY"
Android:value="mykey"/>
GetAutocompletePredictions gibt jedoch die Nachricht 'PLACES_API_ACCESS_NOT_CONFIGURED' als Status zurück.
Hier ist mein Java Code:
GoogleApiClient googleApiClient = new GoogleApiClient.Builder(context)
.addApi(Places.GEO_DATA_API)
.addApi(Places.PLACE_DETECTION_API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
googleApiClient.connect();
LatLngBounds latLngBounds = new LatLngBounds.Builder().
include(SphericalUtil.computeOffset(latlon, RADIUS, 0)).
include(SphericalUtil.computeOffset(latlon, RADIUS, 90)).
include(SphericalUtil.computeOffset(latlon, RADIUS, 180)).
include(SphericalUtil.computeOffset(latlon, RADIUS, 270)).build();
PendingResult<AutocompletePredictionBuffer> result = Places.GeoDataApi.getAutocompletePredictions(googleApiClient, constraint.toString(), latLngBounds, null);
AutocompletePredictionBuffer autocompletePredictions = result.await(Config.DATA_TIMEOUT, TimeUnit.MILLISECONDS);
Status status = autocompletePredictions.getStatus();
if (status.isSuccess()) {
Iterator<AutocompletePrediction> iterator = autocompletePredictions.iterator();
while (iterator.hasNext()) {
AutocompletePrediction prediction = iterator.next();
//... do stuff here ...
}
}
else {
Log.d(TAG, status.getStatusMessage());
}
autocompletePredictions.release();
googleApiClient.disconnect();
Danke im Voraus
Aktivieren Sie die Google Places-API für Android in der Entwicklerkonsole und überprüfen Sie auf der Seite mit den Anmeldeinformationen, ob Ihr Schlüssel noch vorhanden ist
Schritt für Schritt Lösung, der ich folge:
Gehen Sie einfach zu https://console.developers.google.com/
öffnen Sie Ihr Projekt und klicken Sie in den linken Registerkarten auf Bibliothek
Klicken Sie jetzt in Mobile APIs auf Google Places API für Android und [~ # ~] Aktiviere [~ # ~] die API
Ich denke, Sie haben versucht, Google Places API für Android zu aktivieren
Aktivieren Sie dies auch, es funktioniert. Sie finden dies unten Google Places API für Android
Google Places API Web Service
Hallo Freunde, ich habe dieses Problem erfolgreich gelöst. Ich habe Auto Complete Goole-Bereiche in meiner App implementiert. Dies wurde von Google Play Services zur Verfügung gestellt. Das Hauptproblem besteht nun darin, dass das Place SDK für Android wird am 29. Januar von den Google Play-Diensten nicht mehr unterstützt. Stattdessen wird jetzt ein neues SDK veröffentlicht. Place sdk für Android. Jetzt können Sie diese Migration verwenden Anleitung zur Implementierung von place sdk in Ihrem Projekt. Den Link finden Sie hier.
Legen Sie das SDK für Android Migrationsanleitung.
Lesen Sie auch die Schritt-für-Schritt-Anleitung zum Implementieren von AutoComplete in Ihrem Projekt. Sehen Sie sich hier diesen Link an Schritt-für-Schritt-Anleitung zum Implementieren von Autocomplete in unserer App.
Hoffe das wird dir helfen. Danke .....
Nach langem Suchen und viel Zeitaufwand habe ich herausgefunden, dass wir From-Implementation 'com.google.Android.gms: play-services-places: 15.0.1' ersetzen müssen.
Ersetzen Sie die Implementierung "com.google.Android.libraries.places: places-compat: 1.0.0".
Die Code-Demo finden Sie unter folgender Adresse: https://github.com/googlemaps/Android-places-demos
Zusätzlich zum Einrichten des API-Schlüssels und zum Aktivieren von APIs, wie von anderen angegeben, musste ich Folgendes tun:
Sie können diese Version der Places-API als Abhängigkeit verwenden.
implementation 'com.google.Android.libraries.places:places-compat:1.1.0'
es gibt zwei Möglichkeiten, wie Sie Ihre Place-API entweder mit Intent oder AutocompleteFragment zum Laufen bringen können. Im Falle einer Absicht können Sie Ihre Suche auf ein bestimmtes Land beschränken, dies gilt jedoch noch nicht für AutocompleteFragment. Unten ist der Code, der für mich funktioniert hat:
<fragment
Android:id="@+id/autocomplete_fragment"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:name="com.google.Android.libraries.places.widget.AutocompleteSupportFragment"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
aktivitätscode:
import Android.os.Bundle;
import Android.support.annotation.NonNull;
import Android.support.v7.app.AppCompatActivity;
import Android.util.Log;
import Android.widget.Toast;
import com.google.Android.gms.common.api.Status;
import com.google.Android.libraries.places.api.Places;
import com.google.Android.libraries.places.api.model.Place;
import com.google.Android.libraries.places.widget.AutocompleteSupportFragment;
import com.google.Android.libraries.places.widget.listener.PlaceSelectionListener;
import org.jetbrains.annotations.NotNull;
import Java.util.Arrays;
public class AutocompleteFragmentActivity extends AppCompatActivity {
private String TAG ="FRAGMENT_AUTOCOMPLETE";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_autocomplete_fragment);
/**
* Initialize Places. For simplicity, the API key is hard-coded. In a production
* environment we recommend using a secure mechanism to manage API keys.
*/
if (!Places.isInitialized()) {
Places.initialize(getApplicationContext(), "API_KEY");
}
// Initialize the AutocompleteSupportFragment.
AutocompleteSupportFragment autocompleteFragment = (AutocompleteSupportFragment)
getSupportFragmentManager().findFragmentById(R.id.autocomplete_fragment);
assert autocompleteFragment != null;
autocompleteFragment.setPlaceFields(Arrays.asList(Place.Field.ID, Place.Field.NAME));
autocompleteFragment.setOnPlaceSelectedListener(placeSelectionListener);
}
PlaceSelectionListener placeSelectionListener = new PlaceSelectionListener() {
@Override
public void onPlaceSelected(@NonNull Place place) {
Log.i(TAG, "Place: " + place.getName() + ", " + place.getId());
Toast.makeText(AutocompleteFragmentActivity.this, place.getName()+", "+ place.getAddress(), Toast.LENGTH_SHORT).show();
}
@Override
public void onError(@NotNull Status status) {
Log.i(TAG, "An error occurred: " + status);
}
};
}
aktivitätsklasse für Intent
import Android.app.Activity
import Android.content.Intent
import Android.os.Bundle
import Android.support.v7.app.AppCompatActivity
import Android.util.Log
import Android.widget.Toast
import com.google.Android.libraries.places.api.Places
import com.google.Android.libraries.places.api.model.Place
import com.google.Android.libraries.places.widget.Autocomplete
import com.google.Android.libraries.places.widget.AutocompleteActivity
import com.google.Android.libraries.places.widget.model.AutocompleteActivityMode
import Java.util.*
class AutocompleteActivity : AppCompatActivity() {
private var AUTOCOMPLETE_REQUEST_CODE = 0
private var TAG: String = "AUTOCOMPLETE_ACTIVITY"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_autocomplete)
if (!Places.isInitialized()){
Places.initialize(this, "API_KEY")
}
// val placesClient = Places.createClient(this)
val fields = Arrays.asList(Place.Field.ID, Place.Field.NAME,Place.Field.ADDRESS)
val intent = Autocomplete.IntentBuilder(AutocompleteActivityMode.FULLSCREEN, fields)
.setCountry("NG")
.build(this)
startActivityForResult(intent,AUTOCOMPLETE_REQUEST_CODE)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == AUTOCOMPLETE_REQUEST_CODE){
if (resultCode == Activity.RESULT_OK){
val place = Autocomplete.getPlaceFromIntent(data!!)
Log.i(TAG,"Place: "+ place.name + ", "+ place.id)
}
else if (resultCode == AutocompleteActivity.RESULT_ERROR){
val status = Autocomplete.getStatusFromIntent(data!!)
Log.i(TAG, status.statusMessage)
}
else if (resultCode == Activity.RESULT_CANCELED){
Toast.makeText([email protected], "You cancelled the operation", Toast.LENGTH_LONG).show()
}
}
}
}
Vergessen Sie nicht, Ihre Abhängigkeiten hinzuzufügen
dependencies {
implementation 'com.google.Android.gms:play-services-places:16.0.0'
implementation 'com.google.Android.libraries.places:places:1.0.0'
}
Damit dies funktioniert, müssen Sie beide zu Ihrer gradle-Datei hinzufügen. Versuchen Sie, dies sollte funktionieren !!! :)
googleApiClient.connect();
sollte in der Methode onMapReady der Schnittstelle OnMapReadyCallback aufgerufen werden.