web-dev-qa-db-fra.com

Android API Google Adresses, getAutocompletePredictions renvoie le statut "PLACES_API_ACCESS_NOT_CONFIGURED"

Je rencontre des problèmes avec Android API Google Adresses - fonctionnalité de saisie automatique. J'utilise la même clé que j'ai utilisée pour Android API Google Maps (et dans le documentation, il est écrit c'est ok) Voici ma définition dans le manifeste:

<meta-data
        Android:name="com.google.Android.geo.API_KEY"
        Android:value="mykey"/>

Mais getAutocompletePredictions renvoie le message 'PLACES_API_ACCESS_NOT_CONFIGURED' comme statut.

Voici mon Java:

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();

Merci d'avance

26
enver

Activez l'API Google Adresses pour Android dans la console des développeurs et vérifiez sur la page d'informations d'identification que votre clé est toujours présente

51
andrei

Solution étape par étape que je suit:

  • Allez simplement sur https://console.developers.google.com/

  • ouvrez votre projet et cliquez sur Bibliothèque dans les onglets de gauche

  • Maintenant, dans les API mobiles cliquez sur API Google Places pour Android et [~ # ~] activer [~ # ~] l'api

enter image description here

25
Kapil Rajput

Je pense que vous avez essayé d'activer API Google Adresses pour Android

Activez cela aussi, cela fonctionne. Vous pouvez le trouver ci-dessous API Google Adresses pour Android

Google Places API Web Service
1
madhu sudhan

Salut les amis, j'ai réussi à résoudre ce problème. Cela a été fourni par les services Google Play. Maintenant, le principal problème est que Place SDK pour Android est déconseillé des services Google Play le 29 janvier. Maintenant, un nouveau SDK est publié à la place de. Place sdk pour Android. Vous pouvez maintenant utiliser cette migration guide pour implémenter place sdk dans votre projet. Le lien est disponible ici.

Placez le SDK pour Android.

Voir également le guide étape par étape pour implémenter la saisie semi-automatique dans votre projet. Regardez ici ce lien guide étape par étape pour implémenter la saisie semi-automatique dans notre application.

J'espère que cela vous aidera.Merci .....

1
Rahul Kushwaha

Après beaucoup de recherches et de beaucoup de temps, j'ai découvert que nous devons remplacer From implementation "com.google.Android.gms: play-services-places: 15.0.1"

Remplacer par l'implémentation 'com.google.Android.libraries.places: places-compat: 1.0.0'

La démo de code peut être trouvée à l'emplacement suivant: https://github.com/googlemaps/Android-places-demos

1
Vikram Cirigiri

En plus de configurer la clé d'API et d'activer les API comme indiqué par d'autres, j'ai dû faire ce qui suit:

  1. Configurer un compte de facturation (j'obtenais l'erreur "Limite maximale dépassée ..."
  2. Passez à l'utilisation de la bibliothèque cliente du SDK Places comme indiqué ici: https://developers.google.com/places/Android-sdk/client-migration . (Notez que je n'ai pas choisi d'utiliser la bibliothèque de compatibilité depuis la version Google Play Services du SDK Places pour Android sera désactivé le 29 juillet 2019.)
0
Amit Misra

Vous pouvez utiliser cette version de l'API Places comme dépendance.

implementation 'com.google.Android.libraries.places:places-compat:1.1.0'
0

il y a deux façons de faire fonctionner votre API Place soit par Intent ou AutocompleteFragment, en cas d'intention, vous pouvez restreindre votre recherche à un pays spécifique, mais la même chose ne s'applique pas encore à AutocompleteFragment. ci-dessous est le code qui a fonctionné pour moi:

  <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"/>

activityCode:

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);

        }
    };

}

classe d'activité pour l'intention

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(this@AutocompleteActivity, "You cancelled the operation", Toast.LENGTH_LONG).show()

            }
        }
    }
}

N'oubliez pas d'ajouter vos dépendances

dependencies {

    implementation 'com.google.Android.gms:play-services-places:16.0.0'
    implementation 'com.google.Android.libraries.places:places:1.0.0'
}

Pour que cela fonctionne, vous devez ajouter les deux à votre fichier Gradle Essayez cela devrait fonctionner !!! :)

0
Chidinma Ekenne

googleApiClient.connect(); doit être appelée dans la méthode onMapReady de l'interface OnMapReadyCallback.

0
user8355961