wake-up-neo.com

Android Google Places API, getAutocompletePredictions gibt den Status "PLACES_API_ACCESS_NOT_CONFIGURED" zurück.

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

26
enver

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

51
andrei

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

enter image description here

25
Kapil Rajput

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
1
madhu sudhan

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 .....

1
Rahul Kushwaha

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

1
Vikram Cirigiri

Zusätzlich zum Einrichten des API-Schlüssels und zum Aktivieren von APIs, wie von anderen angegeben, musste ich Folgendes tun:

  1. Richten Sie ein Abrechnungskonto ein (ich habe den Fehler "Maximales Limit überschritten ..." erhalten
  2. Wechseln Sie zur Verwendung der Places SDK-Clientbibliothek wie hier beschrieben: https://developers.google.com/places/Android-sdk/client-migration . (Beachten Sie, dass ich die Kompatibilitätsbibliothek nicht verwendet habe, da die Google Play Services-Version des Places-SDK für Android wird am 29. Juli 2019 deaktiviert.)
0
Amit Misra

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 !!! :)

0
Chidinma Ekenne

googleApiClient.connect(); sollte in der Methode onMapReady der Schnittstelle OnMapReadyCallback aufgerufen werden.

0
user8355961