Android Google Places API,getAutocompletePredictions 返回状态“PLACES_API_ACCESS_NOT_CONFIGURED”

     2023-02-23     157

关键词:

【中文标题】Android Google Places API,getAutocompletePredictions 返回状态“PLACES_API_ACCESS_NOT_CONFIGURED”【英文标题】:Android Google Places API, getAutocompletePredictions returns status 'PLACES_API_ACCESS_NOT_CONFIGURED' 【发布时间】:2015-10-05 15:06:58 【问题描述】:

我在使用 Android Google Places API - 自动完成功能时遇到问题。 我使用的密钥与用于 Android Google Maps API 的密钥相同(在文档中,这样写是可以的)。这是我在清单中的定义:

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

提前致谢

【问题讨论】:

您是否在开发者控制台中启用了适用于 Android 的 Google Places API?它与地图的 API 不同。您还应该检查您的公共 API 访问权限仍然存在的凭据。我昨天遇到了这个问题,我的钥匙刚刚消失了 谢谢@schopy 这里同样的关键问题 我遇到了类似的问题,但不完全相同。 ***.com/questions/31640783/…。任何人,请帮忙。 自 2019 年 1 月 29 日起,Google Play Services 版本的 Places SDK for Android 似乎已弃用。我将依赖项更改为 implementation 'com.google.android.libraries.places:places-compat:1.0.0'。我也在清单文件中添加了 API 密钥。但我仍然收到错误PLACES_API_ACCESS_NOT_CONFIGURED。关于如何解决它的任何想法? 【参考方案1】:

除了按照其他人的说明设置 API 密钥和启用 API 之外,我还必须执行以下操作:

    设置结算帐户(我收到“超出最大限制...”错误 切换到使用 Places SDK 客户端库,如下所述:https://developers.google.com/places/android-sdk/client-migration。 (请注意,我没有选择使用兼容性库,因为 Google Play 服务版本的 Places SDK for Android 将于 2019 年 7 月 29 日关闭。)

【讨论】:

【参考方案2】:

你可以使用这个版本的places api作为依赖。

implementation 'com.google.android.libraries.places:places-compat:1.1.0'

【讨论】:

【参考方案3】:

有两种方法可以通过 Intent 或 AutocompleteFragment 让您的 Place API 工作, 如果有意图,您可以将搜索限制在特定国家/地区,但同样不适用于 AutocompleteFragment。以下是对我有用的代码:

  <fragment
        android:id="@+id/autocomplete_fragment"
        android:layout_
        android:layout_
        android:name="com.google.android.libraries.places.widget.AutocompleteSupportFragment"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>

活动代码:

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(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 文件中 试试这个它应该工作! :)

【讨论】:

【参考方案4】:

嗨朋友们,我已经成功解决了这个问题。我正在我的应用程序中实现自动完成 Goole 地点。这是由 Google Play 服务提供的。现在的主要问题是 1 月 29 日,Google Play 服务已弃用 Place SDK for Android。现在,发布了新的 SDK,而不是。为 Android 放置 sdk。现在您可以使用此迁移指南在您的项目中实现 place sdk。链接在这里。

Place SDK for Android migration guide.

另请参阅如何在您的项目中实现自动完成的分步指南。看这里这个链接step by step guide to implement Autocomplete in our app.

希望这对你有帮助。谢谢.....

【讨论】:

我成功解决了。【参考方案5】:

经过大量搜索和花费大量时间,我发现我们需要更换 从 实施 '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

【讨论】:

谢谢。这真的很有帮助 我把它改成了implementation 'com.google.android.libraries.places:places-compat:1.0.0'。我也在清单文件中添加了 API 密钥。但我仍然收到错误PLACES_API_ACCESS_NOT_CONFIGURED。关于如何解决它的任何想法? @harshpamnani 你有解决办法吗? 是的。该解决方案对我有用。如果您遇到任何问题,请告诉我。【参考方案6】:

我认为您尝试启用 适用于 Android 的 Google Places API

启用它也可以。您可以在 Android 版 Google Places API

下方找到此内容
Google Places API Web Service

【讨论】:

【参考方案7】:

googleApiClient.connect();应该在接口OnMapReadyCallback的onMapReady方法中调用。

【讨论】:

【参考方案8】:

我遵循的逐步解决方案:

去https://console.developers.google.com/

打开您的项目并点击左侧标签中的

现在在 Mobile APIs 中点击 Google Places API for Android启用 api

【讨论】:

我已经这样做了,问题是,PLACES_API_ACCESS_NOT_CONFIGURED,但是 ApiKey 已经在那里了! Omg... 你会认为创建一个 Android 密钥并为 Places 和 Maps 添加限制意味着这些密钥可以为它们工作...但是在完全不同的地方隐藏了单独的启用按钮页面 smh.【参考方案9】:

在开发者控制台中启用适用于 Android 的 Google Places API 并在凭据页面上检查您的密钥是否仍然存在

【讨论】:

非常感谢,我为了这件事浪费了我的全部精力。 现在我们必须专门使用 Places SDK for Android Nirzon,您能否说明如何启用 Place SDK for Android?启用 API 并查询“Place SDK for Android”时,Google 仅返回“Places API”,这一直给我 PLACES_API_ACCESS_NOT_CONFIGURED 9003 错误。谢谢

获取适用于 Android 的 Google Places API 密钥

】获取适用于Android的GooglePlacesAPI密钥【英文标题】:GettingGooglePlacesAPIkeyforAndroid【发布时间】:2016-03-2710:37:17【问题描述】:在过去的一周里,我一直在尝试为android实现GooglePlacesAPI,Google的开发者页面说我需要一个api密钥,在... 查看详情

适用于 Android 的 Google Places API:地图立即消失

】适用于Android的GooglePlacesAPI:地图立即消失【英文标题】:GooglePlacesAPIforAndroid:Mapsvanishinginstantly【发布时间】:2016-05-3003:38:23【问题描述】:我正在使用以下代码通过GooglePlacesAPIforAndroid在我的应用程序上显示地图:publicvoidshowMa... 查看详情

Google Places API Android:自动完成关闭太快

】GooglePlacesAPIAndroid:自动完成关闭太快【英文标题】:GooglePlacesAPIAndroid:Autocompletionclosestooquickly【发布时间】:2017-04-0103:46:53【问题描述】:我在我的Android应用中添加了地方自动完成功能。当我单击一个按钮(chooseLocationButton)时... 查看详情

Google Places API 总是返回错误

...【发布时间】:2015-05-0504:55:35【问题描述】:我已在我的android应用程序中集成了GooglePlacesAPI。我已经阅读了api文档SeeHere。我已经为android激活了GooglePlacesApi并生成了浏览器密钥当我调用api时得到错误响应-"error_message":"Th 查看详情

Android Google Places API - PlaceAutocompleteFragment 清除按钮监听器

】AndroidGooglePlacesAPI-PlaceAutocompleteFragment清除按钮监听器【英文标题】:AndroidGooglePlacesAPI-PlaceAutocompleteFragmentclearbuttonlistener【发布时间】:2016-07-0722:09:16【问题描述】:我在我的项目中使用GooglePlacesAPIforAndroid-PlaceAutocompleteFragme 查看详情

如何为我的 Android 应用获取 Google Places API 密钥

】如何为我的Android应用获取GooglePlacesAPI密钥【英文标题】:HowdoIgetaGooglePlacesAPIkeyformyAndroidApp【发布时间】:2014-08-0918:35:00【问题描述】:在过去的48小时里,我一直在努力寻找这个问题的答案。问这个问题的人:howcanImakeAPIKEYfor... 查看详情

Google Places API Autocomplete 仅获取城市列表

...【发布时间】:2019-01-2704:08:05【问题描述】:我正在我的Android应用程序上实现google的地点自动完成功能,它可以显示每个类似的地点,但是只有当用户尝试搜索任何内容时,我才能获得城市建议。我进行了很多搜索,但无法找... 查看详情

即使使用正确的 API 密钥,Android 自动完成的 Google Places API 请求也会被拒绝

】即使使用正确的API密钥,Android自动完成的GooglePlacesAPI请求也会被拒绝【英文标题】:GooglePlacesAPIrequestdeniedforAndroidautocomplete,evenwiththerightapikey【发布时间】:2013-01-1706:21:14【问题描述】:我正在尝试使用本教程中描述的GooglePlac... 查看详情

使用适用于 android 的 google places api 网络服务搜索特定的附近地点

】使用适用于android的googleplacesapi网络服务搜索特定的附近地点【英文标题】:Searchspecificnearbyplacesusinggoogleplacesapiwebservicesforandroid【发布时间】:2016-02-2613:34:32【问题描述】:我正在尝试使用googleplacesapi网络服务将地点搜索类型... 查看详情

如何从 Android/Java 中的 Google Places API 获取有关地点的确切子类别名称? [复制]

】如何从Android/Java中的GooglePlacesAPI获取有关地点的确切子类别名称?[复制]【英文标题】:HowcanIgetexactsubcategorynameaboutaplacefromGooglePlacesAPIinAndroid/Java?[duplicate]【发布时间】:2020-11-2114:30:16【问题描述】:看这个截图:image如果您仔... 查看详情

在 Android Studio 中使用 Google Places API 时找不到汽车修理店/车库/汽车店

】在AndroidStudio中使用GooglePlacesAPI时找不到汽车修理店/车库/汽车店【英文标题】:Can\'tfindCar-repair/garage/motorshopswhileusingGooglePlacesAPIinAndroidStudio【发布时间】:2020-08-2706:42:42【问题描述】:publicvoidonMapReady(GoogleMapgoogleMap)mMap=googleMap 查看详情

Google 是不是采取了措施来防止恶意 Places API 滥用?

...5-1009:21:30【问题描述】:我有一个使用PlacesAutoCompleteAPI的Android应用。现在,谷歌收取$x/request 查看详情

反应:Google Places API/ Places 详细信息

】反应:GooglePlacesAPI/Places详细信息【英文标题】:React:GooglePlacesAPI/PlacesDetails【发布时间】:2017-12-3005:41:47【问题描述】:我有以下代码,它基于GooglePlacesAPI检索GooglePlaces评论。我已经将逻辑合并为React生命周期组件。目前,我... 查看详情

新的 Google API 密钥“Google Maps API v3”不适用于 Google Places API?

】新的GoogleAPI密钥“GoogleMapsAPIv3”不适用于GooglePlacesAPI?【英文标题】:NewGoogleAPIKey"GoogleMapsAPIv3"doesn\'tworkforGooglePlacesAPI?【发布时间】:2012-08-3108:14:40【问题描述】:我正在使用GooglePlacesAPI(https://developers.google.com/places 查看详情

使用 Google Places Autocomplete API 时空间不工作

...【发布时间】:2013-11-1623:12:51【问题描述】:当我在我的Android应用中输入空格时,我的下拉菜单中不再显示任何结果。我怎样才能解决这个问题?我正在对输入进行编码,所以我不确定它为什么不起作用...空格前:空格后:我... 查看详情

Google Places API 与 Google Geocode API

】GooglePlacesAPI与GoogleGeocodeAPI【英文标题】:GooglePlacesAPIvs.GoogleGeocodeAPI【发布时间】:2014-03-1823:36:01【问题描述】:我已经使用自动完成功能和GoogleGeocodingApi实现了GooglePlacesAPI。问题是结果似乎无法正常工作。有时从自动完成列... 查看详情

使用 google-places-api 的简单 html 页面的 ApiNotActivatedMapError

】使用google-places-api的简单html页面的ApiNotActivatedMapError【英文标题】:ApiNotActivatedMapErrorforsimplehtmlpageusinggoogle-places-api【发布时间】:2016-06-1212:42:16【问题描述】:我正在尝试创建一个包含google-places-api的简单html页面(稍后我想... 查看详情

Google Places API 结果与 Google 搜索不匹配

】GooglePlacesAPI结果与Google搜索不匹配【英文标题】:GooglePlacesAPIresultsdonotmatchGooglesearch【发布时间】:2014-10-2403:40:57【问题描述】:在我的数据中,我发现了许多类似以下的示例。如果您在Google上搜索“CheyneyUniversityPA”,您会得... 查看详情