NETWORK_PROVIDER not providing updated locations

匿名 (未验证) 提交于 2019-12-03 02:11:02

问题:

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); 

That's the code I'm using to listen. With GPS enabled, everything works fine. However, if I disable GPS and rely on network location, it gives me stale results -- in this case, from two days ago. I cannot get it to update. Calling getLastKnownLocation returns the same stale results.

Google Maps updates just fine, so I know it's not a hardware/system configuration problem.

I've Googled around, and found a few people with similar problems, but no answers. I've tried targeting my project to API level 8 (2.2) as well as 15 (4.0.3). Same results. My phone is running ICS.

I've also tried removing the request for GPS_PROVIDER, as well as including requests for everything in getAllProviders(). Same deal.

Any idea why NETWORK_PROVIDER is not updating? Any help would be greatly appreciated.

(P.S. No, I don't I normally use "1, 1" as my time/distance parameters; I just changed it while debugging this.)

EDIT: I forgot to mention that yes, isProviderEnabled() returns true.

回答1:

I finally found a way to solve this problem (see my question here).

In my case on S3 Galaxy Mini there were similar symptoms (no location updates until reboot...) like the ones described above. Location in most cases stopped updating when the device reached low power conditions, but sometimes it just happened even when the phone was fully charged. Obviously this is a problem somewhere in the LocationManager. I managed to bypass LocationManager by using the new Google Play Services API for locations (LocationClient class).

This is probably the reason why the location updates were still working with Google Maps, because Google Maps were using Google Play Services API even before it was made public.

I recommend you to follow this link which shows the way how to use Play Services API to get locations instead of using LocationManager if you encounter this problem.

Im running location updates with Play Services and there were absolutely no problems like this anymore - I keep receiving regular location updates anytime.

Beware that this will require that the user must have Google Play installed on their device, so Kindles and the like will be out of the picture. It also requires a minimum of Android 2.2.



回答2:

I currently suspect it is caused by not using removeUpdates(listener) on app shutdown or activity ondestroy. I have made sure to implement that and hope it fixes it. I can't think of anything else.

--edit-- This did not fix it unfortunately.



回答3:

1) first you check whether you have give the permission that is suggested above. 2) you must sure that internet is working in your handset. 3) please find the below code.

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:

If you are working on new phone you have to check if you have accepted all agreements in google maps app - else you will not receive any updates from NETWORK_PROVIDER.



回答5:

you can use like this for update location.Locationlistener will work for location....

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


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!