Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 422
#1

GPS. Слушатель LocationListener - Программирование Android

29.11.2013, 00:02. Просмотров 1590. Ответов 3
Метки нет (Все метки)

Изменения текущего местоположения сохраняю в файл, сохраняя время и координаты.
Потом просматриваю его и выясняется, что записи дублируются по несколько раз.
Подозреваю, что это происходит после того, как программу вызвали второй раз после того, как она свернулась (смену ориентации запретил).
Я понимаю, что тогда создается новый слушатель.
Но неужели не удаляется старый?
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 public void onCreate(Bundle savedInstanceState) {
 
        LocationManager_GPS = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        LocationListener_GPS = new LocationListener_GPS();
 
        if (LocationListener_GPS != null) {
            LocationManager_GPS.requestLocationUpdates(LocationManager.GPS_PROVIDER, GPS_Time, 10, LocationListener_GPS);
        }
 
 }
 
    private class LocationListener_GPS implements LocationListener {
 
        @Override
        public void onLocationChanged(Location argLocation) {
 
            String Latitude = String.valueOf(argLocation.getLatitude());
            String Longitude = String.valueOf(argLocation.getLongitude());
 
            WriteGeo(Latitude + " " + Longitude); //запись лога
            
        }
 
        public void onProviderDisabled(String provider) {
        }
        public void onProviderEnabled(String provider) {
        }
        public void onStatusChanged(String provider, int status, Bundle extras) {
        }
    }
Добавлено через 2 часа 29 минут
Вроде как рекомендуется создавать LocationListener не в Activity, а в Application.
А как это?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.11.2013, 00:02     GPS. Слушатель LocationListener
Посмотрите здесь:

Узнать, запущен ли слушатель - Программирование Android
Можно ли определить, запущен ли слушатель? Т.е. было ли выполнено addListener...()

Слушатель для события касания по тексту - Программирование Android
Подскажите пожалуйста как создать обработчик события касания по разному тексту? Допустим есть StringBuilder str str заполнен с помощью...

Как остановить слушатель сканера отпечатков пальцев - Программирование Android
Добрый день! Вопрос такой как после старта прослушивания сканера отпечатков принудительно остановить его, ну и соответсвенно при уходе...

Как можно реализовать слушатель новых сообщений? - Программирование Android
Здравствуйте! Я хочу понять, как можно реализовать получение новых сообщений, даже когда приложение свернуто\закрыто? Как в любом...

GPS Tracker - Программирование Android
Функционал: шлёт GPS координаты по UDP. Струкутра: Activity - запускает и останавливает сервис, отображает кол-во отправленных и...

Прослушка GPS - Программирование Android
Добрый день Регистрирую прослушку на доступность GPS так: BroadcastReceiver receiver = new BroadcastReceiver() { ...

Обман с GPS - Программирование Android
Добрый день. Работаю в такси. Задача следующая: Рассчет стоимости заказа идет по километражу, на основе GPS Как сделать чтобы...

Gps и расстояние - Программирование Android
Вопрос такой, можно ли по координатам которые записываются раз в 5 минут посчитать расстояние? Или это как-то по другому делать?

GPS трекер - Программирование Android
Здравствуйте! Вот пишу диплом, завтра надо сдавать на проверку. Помогите пожалуйста! Дело горит! Надо реализовать отслеживание себя и...

Gps speed - Программирование Android
Всем привет! есть простая задача получить текущюю скорость. Нагуглил метод getSpeed(), но так и не смог понять как с ним работать. На...

Координаты gps (структура) - Программирование Android
создал в разделе про телефоны, может если есть лучший- не знаю. не нашел. вопрос такой: gps координаты видны в виде -широта долгота...

GPS + растровая карта - Программирование Android
Добрый день Как привязать gps координаты к растровой карте? Карту сделал банально скриншотом из карт Гугл. Я так думаю надо сделать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Gabberr
102 / 102 / 17
Регистрация: 13.10.2009
Сообщений: 402
29.11.2013, 10:12     GPS. Слушатель LocationListener #2
Я использую сервис
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
public class GPSTracker extends Service implements LocationListener {
 
    private final Context mContext;
 
    // flag for GPS status
    boolean isGPSEnabled = false;
 
    // flag for network status
    boolean isNetworkEnabled = false;
 
    public boolean canGetLocation = false;
 
    Location location; // location
    double latitude; // latitude
    double longitude; // longitude
 
    // The minimum distance to change Updates in meters
    private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 5; // 5 meters
 
    // The minimum time between updates in milliseconds
    private static final long MIN_TIME_BY_UPDATES = 1000;
 
    // Declaring a Location Manager
    protected LocationManager locationManager;
 
    public GPSTracker(Context context) {
        this.mContext = context;
        getLocation();
    }
 
    public Location getLocation() {
        try {
            locationManager = (LocationManager) mContext.getSystemService(LOCATION_SERVICE);
 
            // getting GPS status
            isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
 
            // getting network status
            isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
 
            if (!isGPSEnabled && !isNetworkEnabled) {
                // no network provider is enabled
            } else {
                this.canGetLocation = true;
 
                // if GPS Enabled get lat/long using GPS Services
                if (isGPSEnabled) {
                    Log.i("GPS", "from gps");
                    if (location == null) {
                        locationManager.requestLocationUpdates(
                                LocationManager.GPS_PROVIDER,
                                MIN_TIME_BY_UPDATES,
                                MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                        Log.d("GPS Enabled", "GPS Enabled");
                        if (locationManager != null) {
                            location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
                            if (location != null) {
                                latitude = location.getLatitude();
                                longitude = location.getLongitude();
                            }
                        }
                    }
                }
                // second get location from Network Provider
                if (isNetworkEnabled) {
                    Log.i("GPS", "from net");
                    locationManager.requestLocationUpdates(
                            LocationManager.NETWORK_PROVIDER,
                            MIN_TIME_BY_UPDATES,
                            MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                    Log.d("Network", "Network");
                    if (locationManager != null) {
                        location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                        if (location != null) {
                            latitude = location.getLatitude();
                            longitude = location.getLongitude();
                        }
                    }
                }
            }
 
        } catch (Exception e) {
            e.printStackTrace();
        }
 
        return location;
    }
 
    /*
     * (non-Javadoc)
     * @see android.app.Service#onBind(android.content.Intent)
     */
    @Override
    public IBinder onBind(Intent intent) {
        // TODO Написать код для метода
        return null;
    }
 
    /*
     * (non-Javadoc)
     * @see
     * android.location.LocationListener#onLocationChanged(android.location.
     * Location)
     */
    @Override
    public void onLocationChanged(Location location) {
        this.location = location;
        Editor ed = MainActivity.getSPref().edit();
        ed.putFloat("lat", (float) location.getLatitude());
        ed.putFloat("lon", (float) location.getLongitude());
        ed.commit();
    }
 
    /*
     * (non-Javadoc)
     * @see android.location.LocationListener#onStatusChanged(java.lang.String,
     * int, android.os.Bundle)
     */
    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Написать код для метода
 
    }
 
    /*
     * (non-Javadoc)
     * @see
     * android.location.LocationListener#onProviderEnabled(java.lang.String)
     */
    @Override
    public void onProviderEnabled(String provider) {
        // TODO Написать код для метода
 
    }
 
    /*
     * (non-Javadoc)
     * @see
     * android.location.LocationListener#onProviderDisabled(java.lang.String)
     */
    @Override
    public void onProviderDisabled(String provider) {
        // TODO Написать код для метода
 
    }
 
    public double getLatitude() {
        if (location != null) {
            latitude = location.getLatitude();
        }
 
        // return latitude
        return latitude;
    }
 
    /**
     * Function to get longitude
     * */
    public double getLongitude() {
        if (location != null) {
            longitude = location.getLongitude();
        }
 
        // return longitude
        return longitude;
    }
 
    public void stopUsingGPS() {
        if (locationManager != null) {
            locationManager.removeUpdates(GPSTracker.this);
        }
    }
 
    public boolean canGetLocation() {
        return this.canGetLocation;
    }
 
}
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 422
29.11.2013, 12:37  [ТС]     GPS. Слушатель LocationListener #3
Спасибо за пример сервиса.
Но вот я попробовал несколько раз вызвать программу из списка запущенных и снова в логах по несколько записей, как-будто несколько копий приложения одновременно отвечают.

Добавлено через 22 минуты
Может я не правильно запускаю службу?
Java
1
gps = new GPSTracker(MyActivity.this);
Может нужно зарегистрировать службу в манифесте и запускать через startService?
Gabberr
102 / 102 / 17
Регистрация: 13.10.2009
Сообщений: 402
29.11.2013, 13:45     GPS. Слушатель LocationListener #4
да можно как сервис запускать, ну и при завершении вызывать stopUsingGPS()
Yandex
Объявления
29.11.2013, 13:45     GPS. Слушатель LocationListener
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru