Android Google 地点 API、getAutocompletePredictions returns 状态 'PLACES_API_ACCESS_NOT_CONFIGURED'
Android Google Places API, getAutocompletePredictions returns status 'PLACES_API_ACCESS_NOT_CONFIGURED'
我在使用 Android Google 地点 API - 自动完成功能时遇到问题。
我使用的密钥与用于 Android Google 地图 API 的密钥相同(并且在文档中,它是这样写的)。这是我在清单中的定义:
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="mykey"/>
但是 getAutocompletePredictions returns '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();
提前致谢
在开发人员控制台中为 Android 启用 Google Places API 并在凭据页面上检查您的密钥是否仍然存在
我遵循的逐步解决方案:
打开您的项目并单击左侧选项卡中的库
现在在手机APIs点击Google地点API以获得Android 和 ENABLE api
googleApiClient.connect();
应该在接口OnMapReadyCallback的onMapReady方法中调用。
我认为您尝试为 Android
启用 Google 个位置 API
同样启用它。您可以在 Google 地方 API 下方找到 Android
Google Places API Web Service
嗨,朋友们,我已经成功解决了这个问题 issue.I 正在我的应用程序中实现自动完成 Goole 地点。这是由 Google 播放服务提供的。现在的主要问题是 Android 的 Place SDK 已从 29 Jan.Now 上的 Google 播放服务中弃用,而是发布了一个新的 SDK。为 Android 放置 sdk。现在您可以使用此迁移指南在您的项目中实施 place sdk。 Link 可在此处获得。
Place SDK for Android migration guide.
另请参阅如何在您的项目中实现自动完成的分步指南。请看这里 link
希望这会有所帮助you.Thanks.....
经过大量搜索和花费大量时间,我发现我们需要更换
从
实施 'com.google.android.gms:play-services-places:15.0.1'
替换为
实施 'com.google.android.libraries.places:places-compat:1.0.0'
代码演示可以在以下位置找到:
https://github.com/googlemaps/android-places-demos
有两种方法可以让您的 Place 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"/>
activity代码:
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);
}
};
}
activity class 意图
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()
}
}
}
}
不要忘记添加依赖项
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 密钥并启用 APIs 之外,我还必须执行以下操作:
- 设置结算帐户(我收到 "maximum limit exceeded..." 错误
- 切换到使用此处概述的 Places SDK 客户端库:https://developers.google.com/places/android-sdk/client-migration。 (请注意,我没有选择使用兼容性库,因为 Google Android 的 Places SDK Play Services 版本将于 2019 年 7 月 29 日关闭。)
我在使用 Android Google 地点 API - 自动完成功能时遇到问题。 我使用的密钥与用于 Android Google 地图 API 的密钥相同(并且在文档中,它是这样写的)。这是我在清单中的定义:
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="mykey"/>
但是 getAutocompletePredictions returns '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();
提前致谢
在开发人员控制台中为 Android 启用 Google Places API 并在凭据页面上检查您的密钥是否仍然存在
我遵循的逐步解决方案:
打开您的项目并单击左侧选项卡中的库
现在在手机APIs点击Google地点API以获得Android 和 ENABLE api
googleApiClient.connect();
应该在接口OnMapReadyCallback的onMapReady方法中调用。
我认为您尝试为 Android
启用 Google 个位置 API同样启用它。您可以在 Google 地方 API 下方找到 Android
Google Places API Web Service
嗨,朋友们,我已经成功解决了这个问题 issue.I 正在我的应用程序中实现自动完成 Goole 地点。这是由 Google 播放服务提供的。现在的主要问题是 Android 的 Place SDK 已从 29 Jan.Now 上的 Google 播放服务中弃用,而是发布了一个新的 SDK。为 Android 放置 sdk。现在您可以使用此迁移指南在您的项目中实施 place sdk。 Link 可在此处获得。
Place SDK for Android migration guide.
另请参阅如何在您的项目中实现自动完成的分步指南。请看这里 link
希望这会有所帮助you.Thanks.....
经过大量搜索和花费大量时间,我发现我们需要更换 从 实施 'com.google.android.gms:play-services-places:15.0.1'
替换为 实施 'com.google.android.libraries.places:places-compat:1.0.0'
代码演示可以在以下位置找到: https://github.com/googlemaps/android-places-demos
有两种方法可以让您的 Place 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"/>
activity代码:
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);
}
};
}
activity class 意图
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()
}
}
}
}
不要忘记添加依赖项
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 密钥并启用 APIs 之外,我还必须执行以下操作:
- 设置结算帐户(我收到 "maximum limit exceeded..." 错误
- 切换到使用此处概述的 Places SDK 客户端库:https://developers.google.com/places/android-sdk/client-migration。 (请注意,我没有选择使用兼容性库,因为 Google Android 的 Places SDK Play Services 版本将于 2019 年 7 月 29 日关闭。)