Использование LocationListener вместе с игровым движком AndEngine

Здравствуйте, сейчас я изучаю, как использовать AndEngine вместе с GPS-местоположением телефона. Я решил, что получить доступ к этой информации не должно быть слишком сложно, поэтому я просто взял ChangeableText, и я пытаюсь настроить его, чтобы я мог видеть, что он правильно захватывает местоположение, в основном то, что я сделал, это:

добавлено «реализует LocationListener» в объявление класса

    public class ChangeableTextExample extends BaseExample implements LocationListener{

добавлены переменные местоположения и менеджер местоположения в поля класса:

private long curlat;
private long curlng;
private LocationManager locationManager;

создал экземпляр locationManager в методе onLoadScene():

locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

установите elapsedText для вывода переменных curlat и curlng:

     scene.registerUpdateHandler(new TimerHandler(1 / 20.0f, true, new ITimerCallback() {
        public void onTimePassed(final TimerHandler pTimerHandler) {
            elapsedText.setText("Location: " + curlat + ", " + curlng);
            fpsText.setText("FPS: " + fpsCounter.getFPS());
        }
    }));

и реализуйте метод onLocationChanged(Location arg), чтобы он обновлял поля curlat,curlng.

public void onLocationChanged(Location location) {
    this.curlat = (long) (location.getLatitude()*1E6);
    this.curlng = (long) (location.getLongitude()*1E6);     
}

К сожалению, это не работает, и мне было интересно, может ли кто-нибудь из вас указать мне правильное направление? Я новичок в программировании для Android и еще новичок в программировании с AndEngine. Я предполагаю, что это как-то связано с тем, что locationManager не создан должным образом?

Спасибо!


person NotSimon    schedule 11.03.2011    source источник
comment
вы тестируете на устройстве или эмуляторе?   -  person Robby Pond    schedule 11.03.2011
comment
устройство. Я выхожу на улицу каждые пять минут после того, как закончу код, чтобы пройтись и протестировать GPS. Это боль.   -  person NotSimon    schedule 11.03.2011


Ответы (2)


См. Android — получение местоположения пользователя.

Вы должны фактически сообщить объекту locationManager, чтобы он давал вам обновления (а также поместить разрешение в AndroidManifest.xml для информации о местоположении).

Из ссылки, вот что вам не хватает:

// Register the listener with the Location Manager to receive location updates
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);

Для AndroidManifest.xml (вам, возможно, придется изменить разрешение, если вы предпочитаете использовать только менее точную информацию о местоположении сети/Wi-Fi вместо GPS):

<manifest ... >
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    ...
</manifest>
person typo.pl    schedule 11.03.2011
comment
Я собирался добавить комментарий о том, что когда я заранее получаю информацию, а затем возвращаюсь к представлению AndEngine, оно получает самое последнее местоположение (которое я приказал отображать в представлении), полагая, что это проблема обновления. Увидим, что это делает! - person NotSimon; 11.03.2011

Кстати, вы можете использовать enableLocationSensor класса Engine/BaseGameActivity, чтобы позволить AndEngine управлять поиском местоположения для вас.

person Nicolas Gramlich    schedule 20.06.2011