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
相关产品推荐
相关产品推荐

