以上で完了です。

開発を始めるには、デベロッパー ドキュメント をご覧下さい。

Google Places API for Android をアクティベートする

まず初めに Google Developers Console で次の作業を行います。

  1. プロジェクトを作成または選択する
  2. Google Places API for Android をアクティベートする
  3. 適切なキーを作成する
続ける

属性を表示する

オートコンプリートの結果やプレイスの名前と住所など、Google Places API for Android からのデータを表示する際は、一部の属性や Google ロゴの要件に従う必要があります。

  1. 概要
  2. マップを表示する
  3. 「Powered by Google」属性
  4. サードパーティのコンテンツの属性

概要

属性とロゴの要件には、次のようなカテゴリがあります。

  • Google マップ(マップが表示される場合)。
  • 「Powered by Google」属性。
  • サードパーティから提供されたコンテンツの属性。

要件は、Place Picker UI ウィジェットと、プログラムを使用した API 呼び出しに適用されます。アプリが Place Picker 経由でプレイスを取得して、フォローアップ画面にマップなしでデータを表示した場合、アプリはフォローアップ画面に属性を表示する必要があります。

マップを表示する

マップの表示は必須ではありません。アプリケーションが Places API のデータを地図上に表示する場合、Google のロゴの付いた Google マップを使用する必要があります。Google マップと同じ画面に Places API データを表示するアプリケーションでは、それ以上の属性を Google に提供する必要はありません。

ただし、関連するサードパーティ コンテンツの属性は表示する必要がありますのでご注意ください。

「Powered by Google」属性

Places API のデータを Google マップなしでページまたはビューに表示するアプリケーションでは、データと一緒に「Powered by Google」の画像を表示する必要があります。たとえば、1 つの画面に API から取得したプレイスのリストを表示し、別の画面にそれらのプレイスを Google マップで表示するアプリケーションであれば、最初の画面に「Powered by Google」属性を表示する必要があります。

「Powered by Google」の画像は Google Play サービス ライブラリに Android アプリに適したサイズで用意されています。いかなる場合でも、これらの画像のサイズを変更したり、画像に変更を加えたりすることはできません。

  • 背景が淡色の場合に使用: @drawable/powered_by_google_light
  • 背景が暗色の場合に使用: @drawable/powered_by_google_dark

サードパーティのコンテンツの属性

これらの手順に従って Place Picker や他の API 呼び出しからサードパーティの属性を取得し、アプリに属性を表示します。

Place Picker から属性を取得する

Place Picker から属性を取得するには、PlacePicker.getAttributions() を呼び出して、ユーザーが選択したプレイスが含まれた現在の Intent を渡します。メソッドから HTML 文字列や null(表示する属性がない場合)が返されます。

String thirdPartyAttributions = PlacePicker.getAttributions(intent);
if (thirdPartyAttributions == null) {
  thirdPartyAttributions = "";
}

PlaceLikelihoodBuffer から属性を取得する

端末の現在の場所を要求して取得した情報を表示するアプリの場合、アプリは取得したプレイスの詳細のサードパーティの属性も表示する必要があります。

API が可能性のあるプレイスの一覧を含む PlaceLikelihoodBuffer を返します。PlaceLikelihoodBuffer から属性を取得するには、PlaceLikelihoodBuffer.getAttributions() を呼び出します。メソッドから HTML 文字列や null(表示する属性がない場合)が返されます。

PendingResult<PlaceLikelihoodBuffer> result = Places.PlaceDetectionApi
    .getCurrentPlace(mGoogleApiClient, null);
result.setResultCallback(new ResultCallback<PlaceLikelihoodBuffer>() {
  @Override
  public void onResult(PlaceLikelihoodBuffer likelyPlaces) {
    final CharSequence thirdPartyAttributions =
        likelyPlaces.getAttributions();
    ...
  }
  likelyPlaces.release();
});

PlaceBuffer から属性を取得する

get place by ID を呼び出して取得した情報を表示するアプリの場合、アプリは取得したプレイスの詳細のサードパーティの属性も表示する必要があります。

API がプレイスの一覧を含む PlaceBuffer を返します。PlaceBuffer から属性を取得するには、PlaceBuffer.getAttributions() を呼び出します。メソッドから HTML 文字列や null(表示する属性がない場合)が返されます。

Places.GeoDataApi.getPlaceById(mGoogleApiClient, placeId)
    .setResultCallback(new ResultCallback<PlaceBuffer>() {
  @Override
  public void onResult(PlaceBuffer places) {
    if (places.getStatus().isSuccess()) {
        ...
        final CharSequence thirdPartyAttributions =
            places.getAttributions();
    }
    places.release();
  }
});

写真の属性を表示する

アプリが写真を表示する場合は、それぞれの写真の属性を表示する必要があります。写真の属性を取得するには、PlacePhotoMetadata.getAttributions() を呼び出します。メソッドから HTML 文字列や null(表示する属性がない場合)が返されます。

Places.GeoDataApi.getPlacePhotos(mGoogleApiClient, placeId)
    .setResultCallback(new ResultCallback<PlacePhotoMetadataResult>() {
  @Override
  public void onResult(PlacePhotoMetadataResult photos) {
    if (photos.getStatus().isSuccess()) {
      // Get attribution for the first photo in the list.
      PlacePhotoMetadataBuffer photoResults = photos.getPhotoMetadata();
      if (photoResults.getCount() > 0) {
        PlacePhotoMetadata photo = photoMetadata.get(0);
        CharSequence attribution = photo.getAttributions();
      }
      photoResults.release();
    }
});

サードパーティの属性を表示する

サードパーティ プロバイダの属性には HTML 形式のコンテンツが含まれ、これを提供された形式でユーザーに表示する必要があります。HTML に含まれているリンクはすべてそのまま保持する必要があります。アプリでは、プレイスの詳細の下にこの情報を表示することをお勧めします。

API はアプリで使用されるすべてのプレイスの属性を生成します。属性はプレイスごとではなく、API 呼び出しごとに提供されます。

属性を表示する方法の 1 つに、TextView の使用があります。次に例を示します。

TextView attributionsText = (TextView) findViewById(R.id.attributions);
String thirdPartyAttributions = PlacePicker.getAttributions(intent);
if (thirdPartyAttributions == null) {
  thirdPartyAttributions = "";
}
attributionsText.setText(Html.fromHtml(thirdPartyAttributions));

サードパーティ属性の例

Listings by <a href="https://www.example.com/">Example Company</a>

フィードバックを送信...