Android: обновление информации о бине между действиями - PullRequest
1 голос
/ 29 июля 2011

Я новичок в разработке для Android. Я пытаюсь управлять местоположением GPS между действиями. В частности, я создал поток, начатый с основной активности, который через несколько интервалов обновляет позицию GPS и сохраняет новую позицию в общем Бине. Теперь, когда я передаю Bean-компонент в качестве дополнения к следующему действию, я могу получить последнее значение bean-компонента, но bean-компонент нового действия не обновляется потоком. Я не создаю новый Боб, и по этой причине я думаю, что обновление бина будет видно на новом действии. Вот код, который я использую для извлечения дополнительных данных в новом упражнении:

    ShareBean pos;
    Intent intent = getIntent();
    Bundle extras = getIntent().getExtras();
    if (extras != null)
    {
        pos = (ShareBean)intent.getSerializableExtra("Location");
    }

Любая помощь приветствуется. Спасибо заранее. Simone

1 Ответ

0 голосов
/ 29 июля 2011

вам, вероятно, следует использовать объект LocationManager для получения обновлений Location и доступа к ним Вы можете запросить его для последнего известного местоположения для быстрого обновления.

Ключевым моментом является то, что я прошу менеджера местоположения начать прослушивание, а затем оттуда я могу попросить быстрые обновления в любое время. Я храню обновленную информацию о местоположении в моем ApplicationContext объекте (который я называю appModel локально), который является постоянным на протяжении всей жизни объекта.

Я использую LocationManager так:

locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
startListening();

Начало прослушивания выглядит так:

public void startListening() {

    if (gpsLocationListener == null) {
        // make new listeners
        gpsLocationListener = new CustomLocationListener(LocationManager.GPS_PROVIDER);

        // request very rapid updates initially. after first update, we'll put them back down to a much lower frequency
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 60000, 200, gpsLocationListener);
    }

    //get a quick update
    Location networkLocation = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

    //this is the applicationContext object which persists for the life of the applcation
    if (networkLocation != null) {
        appModel.setLocation(networkLocation);
    }
}

Ваш слушатель местоположения может выглядеть так:

private class CustomLocationListener implements LocationListener {

    private String provider = "";
    private boolean locationIsEnabled = true;
    private boolean locationStatusKnown = true;

    public CustomLocationListener(String provider) {
        this.provider = provider;
    }

    @Override
    public void onLocationChanged(Location location) {
        // Called when a new location is found by the network location provider.
        handleLocationChanged(location);
    }

    public void onStatusChanged(String provider, int status, Bundle extras) {
    }

    public void onProviderEnabled(String provider) {
        startListening();
    }

    public void onProviderDisabled(String provider) {
    }
}

private void handleLocationChanged(Location location) {

    if (location == null) {
        return;
    }

    //get this algorithm from: http://developer.android.com/guide/topics/location/obtaining-user-location.html
    if (isBetterLocation(location, appModel.getLocation())) {
        appModel.setLocation(location);
        stopListening();
    }
}

Удачи!

...