📌  相关文章
📜  如何在 Android 中实现 Google 的 Places AutocompleteBar?(1)

📅  最后修改于: 2023-12-03 15:38:12.446000             🧑  作者: Mango

如何在 Android 中实现 Google 的 Places AutocompleteBar?

当用户在输入地址时,Places AutoCompleteBar 会向他们提供自动完成建议。这是通过使用 Google Places API 实现的,该 API 可以帮助您访问全球地理位置和地点数据。

以下是在 Android 应用程序中实现 Places AutocompleteBar 的步骤:

步骤 1:添加依赖项

在你应用的 build.gradle 文件中,向 dependencies 添加以下依赖项:

implementation 'com.google.android.libraries.places:places:1.0.0'
步骤 2:获取 API 密钥

要使用 Google Places API,您需要先获取 API 密钥。请遵循以下步骤:

  1. 转到 [Google Cloud Console][google-cloud-console]。
  2. 创建或选择您的项目。
  3. 在您的项目中启用 Places API。
  4. 获取 API 密钥。
步骤 3:初始化 Places SDK

在您的应用程序中初始化 Places SDK。在您的 Application 类中添加以下代码行:

import com.google.android.libraries.places.api.Places;

// ...

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        // 初始化 Places SDK
        Places.initialize(getApplicationContext(), "YOUR_API_KEY");
    }
}

将 YOUR_API_KEY 替换为您的 API 密钥。

步骤 4:设置 Places AutocompleteBar

创建一个包含 Places AutocompleteBar 的布局文件。可以使用以下 XML 代码段:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <com.google.android.libraries.places.widget.AutocompleteSupportFragment
        android:id="@+id/autocomplete_fragment"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Enter your address"/>

</LinearLayout>

在您的 Activity 或 Fragment 类中,使用以下代码设置 AutocompleteSupportFragment:

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;

// ...

public class MyActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);

        // 初始化 AutocompleteSupportFragment
        AutocompleteSupportFragment autocompleteFragment = (AutocompleteSupportFragment)
                getSupportFragmentManager().findFragmentById(R.id.autocomplete_fragment);

        // 限制自动完成预测为特定国家或地区
        autocompleteFragment.setCountry("US"); // 美国

        // 设置文本更改、选择、取消选择回调
        autocompleteFragment.setPlaceFields(Arrays.asList(Place.Field.ID, Place.Field.NAME));

        autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() {
            @Override
            public void onPlaceSelected(Place place) {
                Log.i("TAG", "Place: " + place.getName() + ", " + place.getId());
            }

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

将 R.id.autocomplete_fragment 替换为您的 AutocompleteSupportFragment ID。

通过上述步骤,您可以在 Android 应用程序中实现 Google Places AutocompleteBar。由于 Places AutocompleteBar 提供的自动完成功能,用户可以更快、更准确地输入地址。