LocationManager никогда не срабатывает, широта и долгота

Мне нужно получить текущее местоположение, сохранить их в Bundle и перенаправить в BroadCastReceiver, который будет срабатывать каждую 5-ю секунду. Вот как я структурировал свой код

public class GPSServiceActivity extends Activity {

public Bundle locationBundle;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    locationBundle = new Bundle();
    Calendar cal = Calendar.getInstance();

    getCurrentLocation();

    Intent intent = new Intent(GPSServiceActivity.this, GPSHandler.class);
    intent.putExtra("Latitude", locationBundle.getDouble("Latitude"));
    intent.putExtra("Longitude", locationBundle.getDouble("Longitude"));
    // In reality, you would want to have a static variable for the request
    // code instead of 192837
    PendingIntent sender = PendingIntent.getBroadcast(this, 192837, intent,
            PendingIntent.FLAG_UPDATE_CURRENT);

    // Get the AlarmManager service
    AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
    am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender);
    am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 5000,
            sender);
}

public void getCurrentLocation() {
    LocationManager mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    LocationListener mlocListener = new MyLocationListener();
    mlocManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
            5000, 0, mlocListener);

}

/* Class My Location Listener */
public class MyLocationListener implements LocationListener {



    public void onLocationChanged(Location loc) {

        double Latitude = loc.getLatitude();
        double Longitude = loc.getLongitude();

        locationBundle.putDouble("Longitude", Longitude);
        locationBundle.putDouble("Latitude", Latitude);

    }

    public void onProviderDisabled(String arg0) {

    }

    public void onProviderEnabled(String arg0) {

    }

    public void onStatusChanged(String arg0, int arg1, Bundle arg2) {

    }
}

}

My Manifest.xml

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET"/>

После некоторого времени отладки кода я обнаружил, что MyLocationListener никогда не срабатывает, а Bundle locationBundle просто содержит два значения double со значением 0.0 и 0.0. Может ли кто-нибудь дать мне подсказку о том, как получить это и запустить?

ИЗМЕНИТЬ

Просто для тестов я написал этот код

List<String> providers = mlocManager.getAllProviders();

        if(providers.size() > 0) {
            for(int i = 0; i < providers.size(); i++) {
                Log.i("Providers: ", providers.get(i).toString());
            }
        }
        else
            Log.i("Providers: ", "No providers");

И это выводит

network
gps
passive

person Tobias Moe Thorstensen    schedule 05.10.2012    source источник
comment
вы тестируете его на эмуляторе?   -  person Naresh J    schedule 05.10.2012
comment
Да, как сказал парень выше, если вы тестируете его на эмуляторе, вам нужно отправить тестовое местоположение на эмулятор, иначе он просто выдаст ошибку. проверьте: stackoverflow.com/questions/4950389/   -  person Anders Vedal Pettersen    schedule 05.10.2012
comment
Переместите настройку LOcation Provider в onStart вместо onCreate; Проверьте, включен ли ваш провайдер: locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);   -  person CocoNess    schedule 05.10.2012
comment
@TanjaV Сетевой провайдер включен.   -  person Tobias Moe Thorstensen    schedule 05.10.2012


Ответы (2)


вы можете проверить, включен ли провайдер. попросите пользователя включить, если это не так. Проверьте последний аргумент в вызове updateLocationRequest. что такое mlocListener? это объект вашего класса прослушивателя местоположения (MyLocationListener)?

person Stashi    schedule 05.10.2012
comment
Пользователю не нужно включать провайдера, если провайдер NETWORK_PROVIDER, как в моем случае. - person Tobias Moe Thorstensen; 05.10.2012
comment
попробовать getLastKnownLocation()? я не знаю, поможет ли это, но просто проверить, есть ли у вас вообще какое-либо местоположение! - person Stashi; 18.10.2012

MyLocationOverlay

это метод в API карт Google

person Alex Muni    schedule 05.10.2012
comment
Это не имеет отношения к моему вопросу. - person Tobias Moe Thorstensen; 05.10.2012
comment
Вы сказали: Мне нужно получить текущее местоположение.... onLocationChanged ... вы проверяете это событие? ... я использую его для геопозиционирования ... onSensorChanged ... - person Alex Muni; 09.10.2012