NETWORK_PROVIDER不提供更新的位置

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并依靠networking位置,它会给我陈旧的结果 – 在这种情况下,从两天前。 我无法让它更新。 调用getLastKnownLocation返回相同的陈旧结果。

谷歌地图更新就好了,所以我知道这不是一个硬件/系统configuration问题。

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

我也尝试删除GPS_PROVIDER的请求,以及在getAllProviders()中包含所有的请求。 同样的交易。

任何想法为什么NETWORK_PROVIDER不更新? 任何帮助将不胜感激。

(PS不,我通常不会使用“1,1”作为我的时间/距离参数;我只是在debugging的时候改变了它。)

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

我终于find了解决这个问题的方法(请参阅我的问题 )。

在我的情况下在S3银河迷你有类似的症状(没有位置更新,直到重新启动…)像上面描述的那些。 在大多数情况下,当设备进入低功率状态时,位置停止更新,但有时甚至在手机充满电时也会发生。 显然这是LocationManager某处的问题。 我设法通过使用新的Google Play服务API( LocationClient类)来绕过LocationManager

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

我build议您按照此链接显示如何使用Play Services API获取位置,而不是使用LocationManager如果遇到此问题。

我正在使用Play服务运行位置更新,而且绝对没有这样的问题 – 我随时都会收到定期的位置更新。

请注意 ,这将要求用户必须在其设备上安装Google Play,因此Kindles等将不在图片中。 它也需要最低的Android 2.2。

我目前怀疑这是由于在应用程序closures或在removeUpdates(listener)上没有使用removeUpdates(listener)引起的。 我已经确保实现这一点,并希望修复它。 我想不出别的什么

– 编辑 – 这不能解决它不幸的。

1)首先你要检查你是否给出了上面build议的许可。 2)你必须确定互联网正在你的手机上工作。 3)请find下面的代码。

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

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

你可以像这样使用更新location.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"); } }