0

显然有两种方法可以在 Android 中设置模拟位置(目前正在使用 Android 11)

使用 FusedLocationProviderClient 的一种方法:

mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
mFusedLocationClient.setMockMode(true);
mFusedLocationClient.setMockLocation(createLocation(LAT, LNG, ACCURACY));

另一个使用 LocationManager:

LocationManager lm = (LocationManager) ctx.getSystemService(
                    Context.LOCATION_SERVICE);
lm.addTestProvider(providerName, false, false, false, false, false,
                    true, true, 1, 1);
lm.setTestProviderEnabled(providerName, true);
Location mockLocation = createLocation(LAT, LNG, ACCURACY);
lm.setTestProviderLocation(providerName, mockLocation);

想知道什么是正确的方法。对我来说,第二个工作正常,第一个没有(仍在调查)但我想知道正确的方法是什么?还想知道为什么有两种不同的方式?

4

1 回答 1

0

区别在于 LocationManager 与 LocationServices。

LocationManager 是内置的 Android 定位功能。它通过 GPS 或网络识别提供对位置的访问。每个设备都有这个。

LocationServices 是一项 Google Play 服务功能。它的主要价值是使用网络、轻微 GPS 使用和其他数据源来提供位置的“融合”提供商。它往往比电池电量低于 GPS 的网络更准确(但不如 GPS 准确/精确)。只有 OEM 为访问 Google Play 服务而向 Google 支付费用的设备具有此功能(这主要是亚洲和非洲的问题)。

两种不同的系统,两种不同的模拟位置方式。如果您通过 Google Play 服务获取位置,则您的顶部有效,如果通过 LocationManager 获取底部有效。使用与您通常获取位置的方式相匹配的一种。

于 2021-10-13T17:04:54.517 回答