NETWORK_PROVIDER未提供更新的位置

时间:2012-11-27 23:13:35

标签: android geolocation locationmanager

LocationManager locationManager = (LocationManager)getApp().getSystemService(Context.LOCATION_SERVICE); //getApp() returns my Application object
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER , 1, 1, this);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1, 1, this);

那是我用来听的代码。启用GPS后,一切正常。但是,如果我禁用GPS并依赖网络位置,它会给我带来陈旧的结果 - 在这种情况下,从两天前开始。我无法让它更新。调用getLastKnownLocation会返回相同的陈旧结果。

谷歌地图更新很好,所以我知道这不是硬件/系统配置问题。

我用Google搜索过,发现一些有类似问题的人,但没有答案。我已经尝试将我的项目定位到API级别8(2.2)以及15(4.0.3)。结果相同。我的手机正在运行ICS。

我还尝试删除了对GPS_PROVIDER的请求,并在getAllProviders()中包含了对所有内容的请求。同样的交易。

知道为什么NETWORK_PROVIDER没有更新?任何帮助将不胜感激。

(P.S。不,我通常不会使用“1,1”作为我的时间/距离参数;我只是在调试时更改了它。)

编辑:我忘了提及是的,isProviderEnabled()返回true。

5 个答案:

答案 0 :(得分:23)

我终于找到了解决这个问题的方法(参见my question here)。

在我的S3 Galaxy Mini的情况下,有类似的症状(重新启动之前没有位置更新......),如上所述。当设备达到低功率状态时,大多数情况下的位置停止更新,但有时甚至在手机充满电时也会发生。 显然这是LocationManager中的某个问题。我设法绕过LocationManager,为地点(LocationClient类)使用新的Google Play服务API。

这可能是位置更新仍在使用Google地图的原因,因为Google地图甚至在公开之前就使用了Google Play服务API。

我建议您按照this link说明如何使用Play Services API获取位置,而不是在遇到此问题时使用LocationManager

我正在使用Play服务运行位置更新,并且完全没有这样的问题了 - 我随时都会定期收到定期更新。

小心这将要求用户必须在其设备上安装Google Play,因此Kindles等将不在其中。它还需要至少Android 2.2。

答案 1 :(得分:0)

我目前怀疑这是因为我没有在app关闭或活动ondestroy上使用removeUpdates(listener)。我已经确保实现它并希望它能解决它。我想不出别的什么。

- edit-- 不幸的是,这并没有解决它。

答案 2 :(得分:0)

如果您正在使用新手机,则必须检查您是否已接受Google地图应用中的所有协议 - 否则您将无法从NETWORK_PROVIDER收到任何更新。

答案 3 :(得分:-1)

1)首先,检查您是否已经提供上述建议的许可。 2)您必须确保您的手机正在使用互联网。 3)请找到以下代码。

public void getLocationByNetworkProvider()
{       
    LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 10000, 10, new LocationListener() {
        public void onStatusChanged(String provider, int status, Bundle extras) {
            // TODO Auto-generated method stub


        public void onProviderEnabled(String provider) {
            // TODO Auto-generated method stub

        }

        public void onProviderDisabled(String provider) {
            // TODO Auto-generated method stub

        }

        public void onLocationChanged(Location location) {
         location.getLatitude();                                location.getLongitude();

        }
    });     

}`

答案 4 :(得分:-3)

您可以像这样使用更新位置.Locationlistener将适用于位置....

import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.widget.TextView;

import android.util.Log;

public class MainActivity extends Activity implements LocationListener{

protected LocationManager locationManager;
protected LocationListener locationListener;
protected Context context;
TextView txtLat;
String lat;
String provider;
protected String latitude,longitude;
protected boolean gps_enabled,network_enabled;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

txtLat = (TextView) findViewById(R.id.textview1);

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
}

@Override
public void onLocationChanged(Location location) {

txtLat = (TextView) findViewById(R.id.textview1);
txtLat.setText("Latitude:" + location.getLatitude() + ", Longitude:" +      location.getLongitude());

}

@Override
public void onProviderDisabled(String provider) {
Log.d("Latitude","disable");
}

@Override
public void onProviderEnabled(String provider) {
Log.d("Latitude","enable");
}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
Log.d("Latitude","status");
}


}