我是Android新手。现在我正在学习位置服务的工作原理。我的问题是,当将两个侦听器,GPS和网络连接到一个对象时,我无法获得位置源。这是我的代码:
public void onLocationChanged(Location location) {
if (location.getProvider() == LocationManager.GPS_PROVIDER) {
textView1.setText("Lat: " + location.getLatitude() + ", Long: " + location.getLongitude() + " by GPS");
} else if (location.getProvider() == LocationManager.NETWORK_PROVIDER) {
textView1.setText("Lat: " + location.getLatitude() + ", Long: " + location.getLongitude() + " by network");
}
}
并且此代码永远不会更新TextView。我试过它在不同的情况下,室内/室外,打开/关闭GPS,什么都没有...我很困惑,因为下面的代码,我不检查提供商:
public void onLocationChanged(Location location) {
textView1.setText("Lat: " + location.getLatitude() + ", Long: " + location.getLongitude());
}
效果很好。
我做错了什么?
答案 0 :(得分:0)
if (location.getProvider == LocationManager.GPS_PROVIDER)
不要将字符串与==进行比较,请使用此
if (location.getProvider().equals(LocationManager.GPS_PROVIDER)
答案 1 :(得分:0)
这并不明显,但由于某些原因,Android的LocationManager
使用字符串来定义提供程序常量。因此,您需要使用.equals()
检查字符串,而不是==
:
if (location.getProvider().equals(LocationManager.GPS_PROVIDER)) {
// ...
}
答案 2 :(得分:0)
LocationManager.GPS_PROVIDER
& LocationManager.NETWORK_PROVIDER
是字符串常量,因此您需要使用String类的equals()
方法进行比较,如下所示,
public void onLocationChanged(Location location)
{
if (location.getProvider.equals(LocationManager.GPS_PROVIDER)) {
textView1.setText("Lat: " + location.getLatitude() + ", Long: " + location.getLongitude() + " by GPS");
} else if (location.getProvider.equals(LocationManager.NETWORK_PROVIDER)) {
textView1.setText("Lat: " + location.getLatitude() + ", Long: " + location.getLongitude() + " by network");
}
}