位置提供商检查不适用于Android

时间:2014-04-03 11:53:16

标签: android location

我是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());
}

效果很好。

我做错了什么?

3 个答案:

答案 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");
    }
}