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

