Ответ 1
Включите API Google Адресов для Android в консоли разработчика и проверьте на странице учетных данных, что ваш ключ все еще присутствует
У меня проблемы с API Google Адресов Google - функция автозаполнения. Я использую тот же ключ, что и для Android API Google Maps (и в документации написано, что все в порядке). Вот мое определение в манифесте:
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="mykey"/>
Но getAutocompletePredictions возвращает сообщение 'PLACES_API_ACCESS_NOT_CONFIGURED' как статус.
Вот мой код 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();
Заранее спасибо
Включите API Google Адресов для Android в консоли разработчика и проверьте на странице учетных данных, что ваш ключ все еще присутствует
Шаг за шагом Решение, которое я следую:
Просто перейдите к https://console.developers.google.com/
откройте свой проект и нажмите Библиотека на вкладках слева.
Теперь в API для мобильных устройств нажмите API Google Адресов для Android и ENABLE. api
googleApiClient.connect();
следует вызывать в методе onMapReady интерфейса OnMapReadyCallback.
Я думаю, вы попробовали включить API Google Адресов для Android
Включите это, и он работает. Вы можете найти это ниже API Google Адресов для Android
Google Places API Web Service
Привет, друзья! Я успешно решил эту проблему. Я внедрял автозаполнение мест в своем приложении. Это было предоставлено сервисами Google Play. Теперь главная проблема заключается в том, что Place SDK для Android не поддерживается сервисами Google Play 29 января. Теперь вместо SDK выпущен новый SDK. Поместите SDK для Android. Теперь вы можете использовать это руководство по миграции для реализации места SDK в вашем проекте. Ссылка доступна здесь.
Поместите SDK для Android руководства по миграции.
Также см. Пошаговое руководство по внедрению автозаполнения в вашем проекте. Посмотрите здесь пошаговое руководство по ссылке , чтобы реализовать автозаполнение в нашем приложении.
Надеюсь, что это поможет вам. Спасибо.....
После долгих поисков и затрат времени я обнаружил, что нам нужно заменить "Из реализации" com.google.android.gms: play-services-place: 15.0.1 '
Заменить на реализацию 'com.google.android.libraries.places: place-compat: 1.0.0'
Демонстрацию кода можно найти по следующему адресу: https://github.com/googlemaps/android-places-demos.
Есть два способа заставить ваш API работать с помощью Intent или AutocompleteFragment, в случае намерения вы можете ограничить свой поиск определенной страной, но тот же пока не применим к AutocompleteFragment. ниже приведен код, который работал для меня:
<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);
}
};
}
класс активности для 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()
}
}
}
}
Не забудьте добавить свои зависимости
dependencies {
implementation 'com.google.android.gms:play-services-places:16.0.0'
implementation 'com.google.android.libraries.places:places:1.0.0'
}
Чтобы это работало, вы должны добавить оба к своему файлу gradle. Попробуйте, это должно работать !!! :)
Вы можете использовать эту версию мест API в качестве зависимости.
implementation 'com.google.android.libraries.places:places-compat:1.1.0'
В дополнение к настройке ключа API и включению API, как отмечали другие, мне пришлось сделать следующее: