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

Place Picker在Moto X2设备无法启动问题排查及代码优化请求

排查Moto X2上Place Picker无法启动的问题 & 代码优化建议

咱们先从几个针对性的排查点入手,一步步定位Moto X2上的问题:

1. 优先检查Google Play服务版本

Moto X2是2014年的老设备,预装的Google Play Services版本大概率偏低,而Place Picker对服务版本有明确要求(通常需要11.0.0以上)。你可以让用户这么操作:

  • 打开设备「设置」→「应用管理」→找到「Google Play服务」,查看版本号
  • 如果版本低于要求,引导用户到Google Play商店更新服务

2. 确认位置权限与定位状态

老设备经常会出现权限或定位未开启的情况:

  • 检查你的App是否获得了精确位置权限(ACCESS_FINE_LOCATION),Place Picker必须依赖这个权限加载附近地点
  • 确认设备的定位服务(GPS/网络定位)已经开启,有些用户会默认关闭定位功能

3. 二次验证API密钥配置

虽然其他设备正常,但还是要排除Moto X2特殊场景的配置遗漏:

  • 检查Google Cloud Console里的API密钥,是否同时配置了debug和release包的SHA-1指纹(如果用户用的是debug包测试)
  • 确认Place Picker API确实在控制台中处于启用状态

代码优化建议

你当前的代码只捕获了两类Google Play服务异常,而且没有权限检查和用户提示,很容易遗漏问题。这里给你优化后的代码:

// 先定义权限请求常量(在Activity中)
private static final int LOCATION_PERMISSION_REQUEST = 1001;
private static final int PLACE_PICKER_REQUEST = 1002;

// 启动Place Picker的方法
private void launchPlacePicker() {
    PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
    try {
        // 先检查位置权限
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
                != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                    LOCATION_PERMISSION_REQUEST);
            return;
        }
        
        Intent placePickerIntent = builder.build(this);
        startActivityForResult(placePickerIntent, PLACE_PICKER_REQUEST);
    } catch (GooglePlayServicesRepairableException e) {
        Log.e("PlacePicker", "需要更新Google Play Services", e);
        Toast.makeText(this, "请先更新Google Play Services再重试", Toast.LENGTH_LONG).show();
        // 跳转至Google Play商店更新
        try {
            startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=com.google.android.gms")));
        } catch (ActivityNotFoundException ignored) {
            startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=com.google.android.gms")));
        }
    } catch (GooglePlayServicesNotAvailableException e) {
        Log.e("PlacePicker", "Google Play Services不可用", e);
        Toast.makeText(this, "当前设备不支持Google Play Services,无法使用地点选择器", Toast.LENGTH_LONG).show();
    } catch (Exception e) {
        // 捕获所有其他未知异常,方便排查
        Log.e("PlacePicker", "地点选择器启动失败", e);
        Toast.makeText(this, "地点选择器启动失败,请稍后重试", Toast.LENGTH_LONG).show();
    }
}

// 处理权限请求结果
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == LOCATION_PERMISSION_REQUEST) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // 权限授予后,重新启动Place Picker
            launchPlacePicker();
        } else {
            Toast.makeText(this, "需要位置权限才能使用地点选择器", Toast.LENGTH_LONG).show();
        }
    }
}

另外还要提醒你:Place Picker API已经被Google废弃,建议尽快迁移到Places SDK for Android的Autocomplete组件,老API不仅会有兼容性问题,后续还可能被停止服务,这也是长期解决这类设备兼容问题的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:01:22