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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.64
Last_Night
19 / 19 / 0
Регистрация: 02.10.2012
Сообщений: 124
#1

GPS service - Android

07.11.2013, 16:39. Просмотров 2900. Ответов 8
Метки нет (Все метки)

Написал сервис для работы GPS однако при попытке вытащить данные просто выдаёт 0

класс реализующий работу c GPS:
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
package com.example.GPSService;
 
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
 
import java.math.BigDecimal;
import java.math.RoundingMode;
 
 
public class GPS {
 
    private final int RAUND_MOD = 4;
    private LocationManager _locationManager;
    private double _latitude = 0;
    private double _longitude = 0;
    private float _accuracy = 0;
    private long _time = 0;
    private float _speed = 0;
    private double _altitude = 0;
    private float _bearing = 0;
 
    private class GPSListener implements LocationListener {
 
        public void onLocationChanged(final Location loc) {
            if (loc != null) setLatitudeAndLongitude( loc.getLatitude(), loc.getLongitude(), loc.getAccuracy(), loc.getTime(), loc.getSpeed(), loc.getAltitude(), loc.getBearing() );
        }
 
        public void onProviderDisabled(String provider) { }
 
        public void onProviderEnabled(String provider) { }
 
        public void onStatusChanged(String provider, int status, Bundle extras) { }
    }
 
    public synchronized double getLatitude() {
        return new BigDecimal(_latitude).setScale(RAUND_MOD, RoundingMode.HALF_EVEN).doubleValue();
    }
 
    public synchronized double getLongitude() {
        return new BigDecimal(_longitude).setScale(RAUND_MOD, RoundingMode.HALF_EVEN).doubleValue();
    }
 
    public synchronized float getAccuracy() {
        return _accuracy;
    }
 
    public synchronized long getTime() {
        return _time;
    }
 
    public synchronized float getSpeed() {
        return _speed;
    }
 
    public synchronized double getAltitude() {
        return _altitude;
    }
 
    public synchronized float getBearing() {
        return _bearing;
    }
 
    private synchronized void setLatitudeAndLongitude(double latitude, double longitude, float accuracy, long time, float speed, double altitude, float bearing) {
        _longitude = longitude;
        _latitude = latitude;
        _accuracy = accuracy;
        _time = time;
        _speed = speed;
        _altitude = altitude;
        _bearing = bearing;
    }
 
    public void setContext(Context context) {
        initializationGPS(context);
    }
 
    private void initializationGPS(Context context) {
        _locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
        _locationManager.requestLocationUpdates(
                LocationManager.GPS_PROVIDER,
                0,
                0,
                new GPSListener());
 
    }
 
}
Сам сервис:
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
package com.example.GPSService;
 
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log;
 
import java.util.Timer;
import java.util.TimerTask;
 
/**
 * Created with IntelliJ IDEA.
 * User: AlexChe
 * Date: 07.11.13
 * Time: 12:40
 * To change this template use File | Settings | File Templates.
 */
public class GPSRobot extends Service {
 
    final String LOG_TAG = "myLogs";
 
    LocalBinder binder = new LocalBinder();
    GPS gps;
 
    Timer timer;
    TimerTask tTask;
    long interval = 1000;
 
    public void onCreate() {
        super.onCreate();
        Log.d(LOG_TAG, "MyService onCreate");
        gps = new GPS();
        timer = new Timer();
        schedule();
    }
 
    void schedule() {
        if (tTask != null) tTask.cancel();
        if (interval > 0) {
            tTask = new TimerTask() {
                public void run() {
                    Log.d(LOG_TAG, "run");
                }
            };
            timer.schedule(tTask, 1000, interval);
        }
    }
 
    long upInterval(long gap) {
        interval = interval + gap;
        schedule();
        return interval;
    }
 
    long downInterval(long gap) {
        interval = interval - gap;
        if (interval < 0) interval = 0;
        schedule();
        return interval;
    }
 
    int getAltitude() {
        return Integer.valueOf((int) gps.getLatitude());
    }
 
    double getLatitude() {
        return gps.getLatitude();
    }
 
    public IBinder onBind(Intent arg0) {
        Log.d(LOG_TAG, "MyService onBind");
        return binder;
    }
 
    class LocalBinder extends Binder {
        GPSRobot getService() {
            return GPSRobot.this;
        }
    }
}
может у кого нибудь есть готовая реализация сервиса?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Gabberr
101 / 101 / 17
Регистрация: 13.10.2009
Сообщений: 402
07.11.2013, 17:18     GPS service #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
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;
        //do something
    }
 
    /*
     * (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;
    }
 
}
Last_Night
19 / 19 / 0
Регистрация: 02.10.2012
Сообщений: 124
07.11.2013, 17:34  [ТС]     GPS service #3
Цитата Сообщение от Gabberr Посмотреть сообщение
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
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;
        //do something
    }
 
    /*
     * (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;
    }
 
}
вылетает при попытке обратится к getLatitude() из активити((
Gabberr
101 / 101 / 17
Регистрация: 13.10.2009
Сообщений: 402
07.11.2013, 17:58     GPS service #4
сперва создайте сервис в активити
Java
1
2
GPSTracker gpsTracker = new GPSTracker(this);
gpsTracker.getLocation();
при вызове метода getLatitude проверяйте значение на нул или поставьте дефолтные значения лат лон по нулям.
Last_Night
19 / 19 / 0
Регистрация: 02.10.2012
Сообщений: 124
07.11.2013, 18:13  [ТС]     GPS service #5
Цитата Сообщение от Gabberr Посмотреть сообщение
сперва создайте сервис в активити
Java
1
2
GPSTracker gpsTracker = new GPSTracker(this);
gpsTracker.getLocation();
при вызове метода getLatitude проверяйте значение на нул или поставьте дефолтные значения лат лон по нулям.
при попытке подключить сервис в манифесте выдаёт ошибку
см в аттаче
Миниатюры
GPS service  
Last_Night
19 / 19 / 0
Регистрация: 02.10.2012
Сообщений: 124
07.11.2013, 20:25  [ТС]     GPS service #6
разобрался, всё работает
спасибо!
Last_Night
19 / 19 / 0
Регистрация: 02.10.2012
Сообщений: 124
09.11.2013, 16:11  [ТС]     GPS service #7
как остановить сервер?
через stopService(intent) не останавливается!
Gabberr
101 / 101 / 17
Регистрация: 13.10.2009
Сообщений: 402
10.11.2013, 13:35     GPS service #8
вот этим методом
Java
1
2
3
4
5
 public void stopUsingGPS() {
        if (locationManager != null) {
            locationManager.removeUpdates(GPSTracker.this);
        }
    }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.11.2013, 16:45     GPS service
Еще ссылки по теме:

Android Обман с GPS
Android GPS трекер
Gps и расстояние Android
Android Gps speed
Android GPS координаты

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

Или воспользуйтесь поиском по форуму:
AlexChe
0 / 0 / 0
Регистрация: 07.11.2013
Сообщений: 4
10.11.2013, 16:45     GPS service #9
Цитата Сообщение от Last_Night Посмотреть сообщение
как остановить сервер?
через stopService(intent) не останавливается!
ещё нужно завершить все процессы использующие сервис!
Yandex
Объявления
10.11.2013, 16:45     GPS service
Ответ Создать тему
Опции темы

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