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

Android Studio中Java调用Places API无法搜索附近地点问题求助

问题原因及解决方案

以下是导致代码跳过findCurrentPlace调用及后续逻辑的常见原因,对应解决办法如下:

1. 缺少必要的位置权限

findCurrentPlace方法必须依赖位置权限才能正常工作,未授权时会直接终止请求,不会触发回调:

  • 先在AndroidManifest.xml中声明权限:
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <!-- 若不需要高精度定位,可替换为ACCESS_COARSE_LOCATION -->
    
  • 必须在运行时获取用户授权,比如使用ActivityResultContracts.RequestPermission:
    // 在Activity/Fragment中请求权限
    registerForActivityResult(new ActivityResultContracts.RequestPermission(), isGranted -> {
        if (isGranted) {
            // 授权成功后再执行findCurrentPlace逻辑
            callFindCurrentPlace();
        }
    }).launch(Manifest.permission.ACCESS_FINE_LOCATION);
    

2. Google Places API未启用

登录Google Cloud控制台,确认Places SDK for Android已启用。未启用的话,所有API请求会被拒绝,无法进入回调逻辑。

3. API密钥配置错误

检查你的API密钥是否满足以下要求:

  • 已绑定当前项目的包名和SHA-1指纹;
  • 密钥未过期、未被限制使用;
  • strings.xml中的google_maps_key值正确无误。

4. 请求的Place字段不完整

你当前只请求了Place.Field.NAME,但代码中用到了place.getLatLng()和place.getTypes(),这两个字段未包含在请求列表中,会导致数据获取失败甚至任务终止。需要补充所需字段:

List<Place.Field> placeFields = Arrays.asList(
    Place.Field.NAME,
    Place.Field.LAT_LNG,
    Place.Field.TYPES
);

5. 未处理任务失败场景

你的代码直接调用task.getResult(),但如果任务失败(比如权限不足、API错误),会抛出异常导致后续逻辑中断。建议先判断任务状态:

@Override
public void onComplete(@NonNull Task<FindCurrentPlaceResponse> task) {
    if (task.isSuccessful()) {
        FindCurrentPlaceResponse response = task.getResult();
        // 原有的遍历逻辑
    } else {
        // 打印错误信息排查问题
        Exception e = task.getException();
        if (e != null) {
            e.printStackTrace();
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 08:50:07