Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
Slon747
59 / 37 / 2
Регистрация: 24.08.2013
Сообщений: 475
#1

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

29.11.2013, 00:02. Просмотров 2137. Ответов 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.
А как это?
http://www.cyberforum.ru/android-dev/thread707680.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.11.2013, 00:02
Я подобрал для вас темы с готовыми решениями и ответами на вопрос GPS. Слушатель LocationListener (Программирование Android):

Узнать, запущен ли слушатель
Можно ли определить, запущен ли слушатель? Т.е. было ли выполнено...

Фоновый слушатель уведомлений
Мне нужен фоновый процесс, который будет ожидать данные с сервера и выводить...

Слушатель для события касания по тексту
Подскажите пожалуйста как создать обработчик события касания по разному тексту?...

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

Как остановить слушатель сканера отпечатков пальцев
Добрый день! Вопрос такой как после старта прослушивания сканера отпечатков...

3
Gabberr
103 / 103 / 19
Регистрация: 13.10.2009
Сообщений: 404
29.11.2013, 10:12 #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;
    }
 
}
1
Slon747
59 / 37 / 2
Регистрация: 24.08.2013
Сообщений: 475
29.11.2013, 12:37  [ТС] #3
Спасибо за пример сервиса.
Но вот я попробовал несколько раз вызвать программу из списка запущенных и снова в логах по несколько записей, как-будто несколько копий приложения одновременно отвечают.

Добавлено через 22 минуты
Может я не правильно запускаю службу?
Java
1
gps = new GPSTracker(MyActivity.this);
Может нужно зарегистрировать службу в манифесте и запускать через startService?
0
Gabberr
103 / 103 / 19
Регистрация: 13.10.2009
Сообщений: 404
29.11.2013, 13:45 #4
да можно как сервис запускать, ну и при завершении вызывать stopUsingGPS()
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2013, 13:45
Привет! Вот еще темы с решениями:

gps и 2 устройства
Доброго времени суток! У меня вопрос возможно ли сделать так чтобы программа...

GPS трекер
Здравствуйте! Вот пишу диплом, завтра надо сдавать на проверку. Помогите...

Прослушка GPS
Добрый день Регистрирую прослушку на доступность GPS так: ...

GPS координаты
public void onCreate(Bundle savedInstanceState) { ...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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