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

部分VIVO设备获取LocationSettingsResult时出现DEVELOPER_ERROR(statusCode=10)

解决VIVO手机LocationSettingsResult回调返回DEVELOPER_ERROR(statusCode=10)的问题

我之前在处理VIVO设备的位置服务时,也碰到过这个DEVELOPER_ERROR(statusCode=10)的问题,结合实际调试经验和官方文档的提示,给你几个针对性的解决思路:

1. 确保权限配置和申请完全合规

VIVO的权限管控比原生Android更严格,务必保证以下几点:

  • 在AndroidManifest.xml中声明必要的位置权限:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 若应用需要后台定位,Android 12+ 需添加 -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
  • 在代码中动态申请这些权限,并且要确保用户授予了正确的权限等级(比如需要后台定位的话,必须让用户选择“始终允许”,而不是“仅使用期间允许”)。

2. 优化LocationRequest的配置

部分VIVO机型对纯GPS的定位请求兼容性较差,建议配置一个兼顾精度和兼容性的LocationRequest:

LocationRequest locationRequest = LocationRequest.create();
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); // 高精度模式,同时支持GPS和网络定位
locationRequest.setInterval(10000); // 常规更新间隔10秒
locationRequest.setFastestInterval(5000); // 最快更新间隔5秒
locationRequest.setWaitForAccurateLocation(false); // 不强制等待高精度定位,避免超时触发错误

用这个配置去构建你的LocationSettingsRequest,能减少VIVO系统的限制触发概率。

3. 补充DEVELOPER_ERROR的回调处理

你的现有代码没有处理LocationSettingsStatusCodes.DEVELOPER_ERROR这个分支,这是导致问题无法被感知和处理的关键!修改后的完整代码如下:

if (locationSettingsResult != null) {
    locationSettingsResult.setResultCallback(locationSettingsResult1 -> {
        final Status status = locationSettingsResult1.getStatus();
        switch (status.getStatusCode()) {
            case LocationSettingsStatusCodes.SUCCESS:
                showRemarksDialogIfRequired();
                break;
            case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                try {
                    if (status.hasResolution()) {
                        status.startResolutionForResult(parentActivity, 333);
                    }
                } catch (IntentSender.SendIntentException e) {
                    e.printStackTrace();
                }
                break;
            case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                Toast.makeText(parentActivity, "Can not set GPS settings for location!!!", Toast.LENGTH_SHORT).show();
                break;
            // 新增DEVELOPER_ERROR的处理逻辑
            case LocationSettingsStatusCodes.DEVELOPER_ERROR:
                Toast.makeText(parentActivity, "位置服务配置异常,请检查位置权限和系统定位设置", Toast.LENGTH_LONG).show();
                // 可选:引导用户直接进入应用权限设置页面
                Intent permissionIntent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                Uri uri = Uri.fromParts("package", parentActivity.getPackageName(), null);
                permissionIntent.setData(uri);
                parentActivity.startActivity(permissionIntent);
                break;
        }
    });
}

4. 针对VIVO设备的特殊引导

如果上述方法仍未解决问题,可以在DEVELOPER_ERROR的回调中,专门引导用户开启系统的高精度定位模式——部分VIVO机型默认使用省电模式(仅网络定位),这会导致位置请求失败:

// 引导用户进入系统定位设置页面
Intent locationSettingsIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
parentActivity.startActivity(locationSettingsIntent);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:57:53