我正在尝试实施一个应用程序,它可以感知GPS和网络提供商的位置并在Google地图上显示。我成功地做到了这一点,但我有一个问题: 我在我的Activity的onCreate()中获取了提供者(它扩展了LocationListener)
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
provider = locationManager.getBestProvider(criteria, false);
location = locationManager.getLastKnownLocation(provider);
它工作正常,我的问题是当调用onLocationChange()时,如果调用它的提供者是GPS或NETWORK,我应该采取不同的行动。有没有办法知道哪个? 更清楚:
调用onLocationChanged(Location location)
时,是否有机会知道哪个提供商拨打了电话?我尝试在提供程序字符串上使用if
,但似乎它不起作用。
答案 0 :(得分:1)
您是否需要了解位置提供商(GPS,WIFI或网络)或其准确性?
获取此位置的估计精确度,以米为单位。
我们将准确度定义为68%置信度的半径。换句话说,如果您绘制一个以此位置的纬度和经度为中心的圆,并且半径等于精度,那么真实位置在圆内的概率为68%。
如果您真的关心提供者,可以使用isProviderEnabled()
。
答案 1 :(得分:1)
检查准确度是否<= 30m:
boolean isGPS = (location.getAccuracy() <= 30);
答案 2 :(得分:0)
我想您想知道哪个提供商提供了最后一次位置更新.....
你已经将Provider创建为字符串,只需在代码中使用该字符串即可 if(provider.matches(&#34; GPS&#34;)){}
答案 3 :(得分:0)
我看到了几个答案,尽管它们可能有用,但没有一个能解决实际问题:
当调用onLocationChanged(位置位置)时,是否有机会知道哪个提供商进行了呼叫?
要知道触发GPS_PROVIDER
NETWORK_PROVIDER
是onLocationChanged
还是getProvider()
,您可以使用provider
方法(或Kotlin中的@Override
public void onLocationChanged(Location location){
//obtain a string, 'gps' or 'network', from the location
System.out.println(location.getProvider());
}
值) :
override fun onLocationChanged(location: Location?) {
println(location!!.provider)
}
或者在Kotlin:
def logfiles(self):
look_for = ['network', 'skip', 'remove', 'jitter', 'loss', 'diff']
analyze = self.open_logs('logfile-1.log')
result = []
for i in analyze:
i = i.strip()
if any(search in i for search in look_for):
result.append(i)
return result
文档参考here