如何在位置自动完成片段中解析PLACES_API_ACCESS_NOT_CONFIGURED

时间:2019-02-13 11:37:37

标签: android google-maps google-places-api google-places

我在使用Android Google Places API时遇到问题-自动完成功能。我使用了与Android Google Maps API相同的密钥,但它不是开放空间片段。它仅显示“地图”,但是在打开“场所自动完成片段”时会打开并自动关闭,并显示PLACES_API_ACCESS_NOT_CONFIGURED错误。请帮助我解决此问题,并显示处理此问题的权利。这是我的清单XML:

  <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="AIzaSyARQ78yaNEJH12aJLM1Y-112WY12p95ZOEGI"/>

这里是我的开放场所AutocolmpleteFragment代码:

 try {
                Intent intent =
                        new PlaceAutocomplete.IntentBuilder(PlaceAutocomplete.MODE_FULLSCREEN)
                                .build(getActivity());
                startActivityForResult(intent, 1);

            } catch (GooglePlayServicesRepairableException | GooglePlayServicesNotAvailableException e) {

                // TODO: Handle the error.

            }

还有这里我获得位置响应的代码:

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 1) {
        if (resultCode ==RESULT_OK) {
            Place place = PlaceAutocomplete.getPlace(getActivity(), data);
            onPlaceSelected(place,1);
            bar.setVisibility(View.GONE);
            autoCompleteTextViewPickup.setFocusable(true);
        } else if (resultCode == PlaceAutocomplete.RESULT_ERROR) {

            Status status = PlaceAutocomplete.getStatus(getActivity(), data);
            this.onError(status,1);
            bar.setVisibility(View.GONE);
            autoCompleteTextViewPickup.setFocusable(true);
        }
    }

2 个答案:

答案 0 :(得分:11)

我遇到了同样的问题,但是我已经能够解决它。

问题是Android的Places SDK的Google Play服务版本(在Google Play服务16.0.0中)已于2019年1月29日弃用,并将于2019年7月29日关闭。 而且,如果您在google API控制台下进行检查,则它只有PLACES API,再也没有像PLACES SDK FOR ANDROID这样的东西了。

在应用程序级build.gradle文件的依赖项部分,为新的SDK客户端库添加依赖项,如以下示例所示:

implementation 'com.google.android.libraries.places:places:1.0.0'

然后,将其初始化。

// Add an import statement for the client library.
import com.google.android.libraries.places.api.Places;

...

// Initialize Places.
Places.initialize(getApplicationContext(), apiKey);

// Create a new Places client instance.
PlacesClient placesClient = Places.createClient(this);

程序化自动完成

对自动完成功能进行了以下更改: PlaceAutocomplete重命名为Autocomplete。 PlaceAutocomplete.getPlace重命名为Autocomplete.getPlaceFromIntent。 PlaceAutocomplete.getStatus重命名为Autocomplete.getStatusFromIntent。 将PlaceAutocomplete.RESULT_ERROR重命名为AutocompleteActivity.RESULT_ERROR(自动完成片段的错误处理未更改)。

如果您像我这样使用自动填充小部件,则可以使用它。

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

然后初始化位置

/**
 * 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(), "YOUR_API_KEY");
}

// Initialize the AutocompleteSupportFragment.
AutocompleteSupportFragment autocompleteFragment = (AutocompleteSupportFragment)
        getSupportFragmentManager().findFragmentById(R.id.autocomplete_fragment);

autocompleteFragment.setPlaceFields(Arrays.asList(Place.Field.ID, Place.Field.NAME));

autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() {
    @Override
    public void onPlaceSelected(Place place) {
        // TODO: Get info about the selected place.
        Log.i(TAG, "Place: " + place.getName() + ", " + place.getId());
    }

    @Override
    public void onError(Status status) {
        // TODO: Handle the error.
        Log.i(TAG, "An error occurred: " + status);
    }
});

在此处查看更多信息

Migrating to the New Place SDK

答案 1 :(得分:1)

似乎正在收到 PLACES_API_ACCESS_NOT_CONFIGURED 警报,因为您不需要进行某些配置:

1)转到google cloud platform

2)在控制台内启用Place API

3)(如果您已经做过-您需要检查2件事:

3-A)(您的API密钥是最新的吗?)(在凭据页面中)

3-B)-在凭据页面中-检查是否有可能阻止您访问API的任何限制。