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
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
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
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
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.
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 .....
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
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:
Vous pouvez utiliser cette version de l'API Places comme dépendance.
implementation 'com.google.Android.libraries.places:places-compat:1.1.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 !!! :)
googleApiClient.connect();
doit être appelée dans la méthode onMapReady de l'interface OnMapReadyCallback.