web-dev-qa-db-ja.com

Android Google Places API、getAutocompletePredictionsはステータス「PLACES_API_ACCESS_NOT_CONFIGURED」を返します

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

前もって感謝します

26
enver

開発者コンソールでAndroidに対してGoogle Places APIを有効にし、資格情報ページでキーがまだ存在することを確認します

51
andrei

私が従うステップバイステップのソリューション:

  • https://console.developers.google.com/ に移動するだけです

  • プロジェクトを開き、左のタブからLibraryをクリックします

  • モバイルAPIで、Android向けGoogle Places APIおよび[〜#〜] enable [〜#〜]API

enter image description here

25
Kapil Rajput

Android向けGoogle Places APIを有効にしようとしたと思います

これも有効にします。以下にありますAndroid向けGoogle Places API

Google Places API Web Service
1
madhu sudhan

こんにちは、この問題を解決できました。アプリにGooleのオートコンプリートプレースを実装していました。これは、Googleプレイサービスによって提供されました。現在の主な問題は、Place SDK for Androidが1月29日にGoogle Playサービスから廃止され、Androidの代わりに新しいSDKがリリースされることです。PlaceSDK for Androidを使用できます。プロジェクトにプレースSDKを実装するためのガイド。リンクはこちらから入手できます。

Android移行ガイドのSDKを配置します。

また、プロジェクトにオートコンプリートを実装する方法については、ステップバイステップガイドをご覧ください。こちらのリンクをご覧ください アプリにオートコンプリートを実装するためのステップバイステップガイド

これがお役に立てば幸いです。

1
Rahul Kushwaha

多くの検索と多くの時間を費やした後、Fromの実装 '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

1
Vikram Cirigiri

他の人が指摘したようにAPIキーをセットアップし、APIを有効にすることに加えて、次のことをしなければなりませんでした。

  1. 請求先アカウントを設定します(「最大制限を超えました...」というエラーが表示されました)
  2. ここで概説されているように、Places SDKクライアントライブラリの使用に切り替えます: https://developers.google.com/places/Android-sdk/client-migration 。 (Google Play ServicesバージョンAndroidは2019年7月29日にオフになります。
0
Amit Misra

このバージョンのPlaces APIを依存関係として使用できます。

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

place APIをIntentまたはAutocompleteFragmentのいずれかで機能させるには2つの方法があります。意図の場合、特定の国に検索を制限できますが、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(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ファイルに追加する必要がありますこれを試してみてください! :)

0
Chidinma Ekenne

googleApiClient.connect();は、OnMapReadyCallbackインターフェースのonMapReadyメソッドで呼び出す必要があります。

0
user8355961