NETWORK_PROVIDER не предоставляет обновленные местоположения - программирование
Подтвердить что ты не робот

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.

4b9b3361

Ответ 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");
}


}