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 и полагаюсь на сетевое расположение, он дает мне устаревшие результаты - в этом случае, с двух дней назад. Я не могу его обновить. Вызов getLastKnownLocation возвращает те же устаревшие результаты.
Обновления Google Maps просто прекрасны, поэтому я знаю, что это не проблема конфигурации оборудования/системы.
У меня Googled вокруг, и нашел несколько людей с аналогичными проблемами, но нет ответов. Я попытался настроить свой проект на уровень API 8 (2.2), а также 15 (4.0.3). Те же результаты. В моем телефоне работает ICS.
Я также попытался удалить запрос для GPS_PROVIDER, а также включить все запросы в getAllProviders(). Та же сделка.
Любая идея, почему NETWORK_PROVIDER не обновляется? Любая помощь будет принята с благодарностью.
(P.S. Нет, я обычно не использую "1, 1" в качестве параметров времени/расстояния, я просто изменил его при отладке.)
EDIT: Я забыл упомянуть, что yes, isProviderEnabled() возвращает true.
Ответы
Ответ 1
Наконец-то я нашел способ решить эту проблему (см. мой вопрос здесь).
В моем случае на S3 Galaxy Mini были похожие симптомы (без обновлений местоположения до перезагрузки...), как те, которые были описаны выше. Расположение в большинстве случаев перестало обновляться, когда устройство достигло низкого энергопотребления, но иногда это случалось даже тогда, когда телефон был полностью заряжен.
Очевидно, что это проблема где-то в LocationManager
. Мне удалось обойти LocationManager
, используя новый API сервисов Google Play для местоположений (LocationClient
class).
Вероятно, это причина, по которой обновления местоположения по-прежнему работают с Картами Google, поскольку Карты Google использовали API сервисов Google Play даже до того, как они были опубликованы.
Я рекомендую вам следовать этой ссылке, которая показывает способ использования API Служб для получения местоположений вместо использования LocationManager
if вы сталкиваетесь с этой проблемой.
Я обновил текущее местоположение в Play Services, и больше не было таких проблем - я постоянно получаю регулярные обновления местоположения.
Остерегайтесь, что для этого потребуется, чтобы на вашем устройстве был установлен Google Play, поэтому Kindles и тому подобное не будут отображаться. Это также требует минимум Android 2.2.
Ответ 2
В настоящее время я подозреваю, что это вызвано не использованием removeUpdates(listener)
при отключении приложения или действии ondestroy. Я позаботился о том, чтобы реализовать это и надеюсь, что он его исправит. Я ничего не могу придумать.
- edit--
К сожалению, это не исправило.
Ответ 3
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
Если вы работаете над новым телефоном, вам необходимо проверить, были ли вы приняты все соглашения в приложении Google Maps, иначе вы не будете получать обновления от NETWORK_PROVIDER.
Ответ 5
вы можете использовать как это для местоположения обновления. 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");
}
}