You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中基于Google Map实现自动完成功能遇导入问题求助

解决Google Places AutocompleteSupportFragment无法导入及自动完成功能实现方案

一、先解决依赖导入问题

1. 添加Module级依赖

打开app目录下的build.gradle(Module级别),在dependencies块中添加Google Places库的依赖:

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

注:版本号可根据官方最新版本调整

2. 确认项目级仓库配置

检查项目根目录下的build.gradle,确保repositories块中包含Google Maven仓库:

allprojects {
    repositories {
        google()
        // 其他仓库...
    }
}

3. 配置API密钥

在Google Cloud Console启用Places API并获取API密钥后,在AndroidManifest.xml中添加元数据:

<application ...>
    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="你的Google Places API密钥"/>
    <!-- 其他组件... -->
</application>

二、完成自动完成功能实现

1. 初始化AutocompleteSupportFragment

在Activity或Fragment中导入类并初始化:

import com.google.android.libraries.places.widget.AutocompleteSupportFragment;
import com.google.android.libraries.places.api.model.Place;
import com.google.android.libraries.places.api.Places;
import java.util.Arrays;

// 在onCreate方法中初始化
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // 初始化Places SDK
    if (!Places.isInitialized()) {
        Places.initialize(getApplicationContext(), "你的API密钥");
    }

    // 获取Fragment实例
    AutocompleteSupportFragment autocompleteFragment = (AutocompleteSupportFragment)
            getSupportFragmentManager().findFragmentById(R.id.autocomplete_fragment);

    // 设置需要返回的地点字段(按需选择)
    autocompleteFragment.setPlaceFields(Arrays.asList(Place.Field.ID, Place.Field.NAME, Place.Field.ADDRESS));

    // 设置地点选中监听
    autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() {
        @Override
        public void onPlaceSelected(@NonNull Place place) {
            // 处理选中的地点,比如显示到TextView
            String placeInfo = String.format("名称:%s\n地址:%s", place.getName(), place.getAddress());
            ((TextView) findViewById(R.id.tv_result)).setText(placeInfo);
        }

        @Override
        public void onError(@NonNull Status status) {
            // 处理错误,比如提示用户
            Toast.makeText(MainActivity.this, "地点选择出错:" + status.getStatusMessage(), Toast.LENGTH_SHORT).show();
        }
    });
}

2. 替代方案:使用Intent启动自动完成界面

如果不想用Fragment,也可以通过Intent唤起官方自动完成页面:

// 定义请求码
private static final int AUTOCOMPLETE_REQUEST_CODE = 1001;

// 触发自动完成的代码(比如按钮点击事件)
public void startAutocomplete(View view) {
    List<Place.Field> fields = Arrays.asList(Place.Field.ID, Place.Field.NAME, Place.Field.ADDRESS);
    Intent intent = new Autocomplete.IntentBuilder(
            AutocompleteActivityMode.OVERLAY, fields)
            .build(this);
    startActivityForResult(intent, AUTOCOMPLETE_REQUEST_CODE);
}

// 处理返回结果
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == AUTOCOMPLETE_REQUEST_CODE) {
        if (resultCode == RESULT_OK) {
            Place place = Autocomplete.getPlaceFromIntent(data);
            String placeInfo = String.format("名称:%s\n地址:%s", place.getName(), place.getAddress());
            ((TextView) findViewById(R.id.tv_result)).setText(placeInfo);
        } else if (resultCode == AutocompleteActivity.RESULT_ERROR) {
            Status status = Autocomplete.getStatusFromIntent(data);
            Toast.makeText(this, "错误:" + status.getStatusMessage(), Toast.LENGTH_SHORT).show();
        }
    }
}

内容的提问来源于stack exchange,提问作者arrow4123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 01:10:27