Wear OS模拟器使用FusedLocation服务获取模拟位置报错求助
Wear OS模拟器获取模拟位置的可行方案
错误原因
com.google.android.gms.common.api.ApiException: 10 本质是Wear OS模拟器默认的FusedLocationProvider不支持模拟位置注入,直接套用手机端的位置模拟方式对Wear模拟器无效。
解决方法
方法1:用ADB命令强制设置位置
直接通过ADB向Wear模拟器发送坐标,绕过FusedLocation的限制:
- 确认Wear模拟器已连接ADB,可通过执行
adb devices查看设备列表 - 替换坐标和设备ID后执行命令:
其中adb -s <wear_emulator_device_id> shell am startservice -a com.google.android.gms.location.FusedLocationProviderApi.SET_MOCK_LOCATION --ef latitude 39.9042 --ef longitude 116.4074<wear_emulator_device_id>是adb devices输出里的Wear模拟器ID - 之后调用FusedLocation接口就能获取到设置的模拟位置
方法2:修改代码启用模拟位置模式
在应用中主动开启模拟位置,配合ADB命令使用:
- 在Manifest中添加权限:
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" /> - 代码中启用模拟模式:
val locationRequest = LocationRequest.create().apply { priority = LocationRequest.PRIORITY_HIGH_ACCURACY interval = 1000 } val settingsClient = LocationServices.getSettingsClient(context) val locationSettingsRequest = LocationSettingsRequest.Builder() .addLocationRequest(locationRequest) .setMockMode(true) .build() settingsClient.checkLocationSettings(locationSettingsRequest) .addOnSuccessListener { // 模拟位置已启用,可获取ADB设置的坐标 } - 执行方法1的ADB命令后,应用即可正常获取模拟位置
方法3:开启模拟器开发者选项的模拟位置功能
部分Wear OS模拟器版本支持该方式:
- 打开模拟器设置,进入「关于手表」,连续点击「版本号」7次启用开发者选项
- 返回设置主界面,进入「开发者选项」,找到「选择模拟位置应用」并选中你的应用
- 之后通过ADB命令即可向应用注入模拟位置
注意事项
- 确保应用已申请
ACCESS_FINE_LOCATION或ACCESS_COARSE_LOCATION权限并获得用户授权 - 建议使用Wear OS 3及以上版本的模拟器,旧版本可能存在兼容性问题
内容的提问来源于stack exchange,提问作者tufekoi
相关产品推荐
相关产品推荐

