How to resolve “Places API for Android does not seem to be enabled for your app”

倾然丶 夕夏残阳落幕 提交于 2019-12-01 11:52:27
Viraj Patel

Notice: The Google Play Services version of the Places SDK for Android (in Google Play Services 16.0.0) is deprecated as of January 29, 2019, and will be turned off on July 29, 2019. A new version of the Places SDK for Android is now available. We recommend updating to the new version as soon as possible. For details, see the migration guide.

You can check the above message in this link under Depreciation notice.

Place APIs are moved to a separate library instead of Google Play Services. So you have to migrate to New Place API library.


You can follow this migration guideline or below code to integrate Places SDK for Android.

1. Add this dependency in app level build.gradle file:
implementation 'com.google.android.libraries.places:places:1.0.0'

Note: minSdkVersion of your application project should be 14 or higher

2. Initialize Places in your Activity.
Places.initialize(getApplicationContext(), YOUR_API_KEY);

3. Call below function when you want to open PlaceAutocomplete Activity

private void startAutocompleteActivity() {
        List<com.google.android.libraries.places.api.model.Place.Field> placeFields = new ArrayList<>(Arrays.asList(com.google.android.libraries.places.api.model.Place.Field.values()));
        List<TypeFilter> typeFilters = new ArrayList<>(Arrays.asList(TypeFilter.values()));
// Create a RectangularBounds object.
  RectangularBounds bounds = RectangularBounds.newInstance(
    new LatLng(-33.880490, 151.184363),
    new LatLng(-33.858754, 151.229596));
        Intent autocompleteIntent =
                new Autocomplete.IntentBuilder(AutocompleteActivityMode.FULLSCREEN, placeFields)
                        .setLocationBias(bounds)
                        .setTypeFilter(typeFilters.get(0))
                        .build(this);
        startActivityForResult(autocompleteIntent, 1001);
    }  

4. Write below code of onActivityResult

/**
     * Override the activity's onActivityResult(), check the request code, and
     * do something with the returned place data (in this example it's place name and place ID).
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == 1001) {
            if (resultCode == RESULT_OK) {
                Place place = Autocomplete.getPlaceFromIntent(data);
                Log.i(TAG, "Place: " + place.getName() + ", " + place.getId());
            } else if (resultCode == AutocompleteActivity.RESULT_ERROR) {
                // TODO: Handle the error.
                Status status = Autocomplete.getStatusFromIntent(data);
                Log.i(TAG, status.getStatusMessage());
            } else if (resultCode == RESULT_CANCELED) {
                // The user canceled the operation.
            }
        }
    }


You can check this Demo application for more detail


Now most important thing is that you have to enable billing to use New Place API for Android.

To use the Places SDK for Android, you must include an API key with all API requests and you must enable billing on each of your projects.

Check this link for more info and pricing.

SKU: Basic Data

Fields in the Basic category are included in the base cost of the Places request, and do not result in any additional charge. The Basic Data SKU is triggered when any of these fields are requested: ADDRESS, ID, LAT_LNG, NAME, OPENING_HOURS, PHOTO_METADATAS, PLUS_CODE, TYPES, USER_RATINGS_TOTAL, VIEWPORT.

You can check pricing and other SKUs in the same link given above.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!