在Android上设置mocklocation的最佳方式



显然有两种方法可以在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);

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

区别在于LocationManager和LocationServices。

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

LocationServices是一个Google Play Services功能。它的主要价值是"融合"。使用网络、少量使用GPS和其他数据源来提供位置的提供商。它往往比网络更准确和更少的电池电力比GPS(但不像GPS精确/精确)。只有原始设备制造商向谷歌支付访问Google Play服务的费用的设备才有这个问题(这主要是亚洲和非洲的问题)。

两个不同的系统,两种不同的模拟位置的方式。如果你是通过Google Play Services获取位置,那么最上面的方法就有效,最下面的方法则是通过LocationManager。使用与你通常获取位置的方式相匹配的那个。