Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

GPS service - Программирование Android

07.11.2013, 16:39. Просмотров 3270. Ответов 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;
        }
    }
}
может у кого нибудь есть готовая реализация сервиса?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.11.2013, 16:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос GPS service (Программирование Android):

Координаты GPS внутри service - Программирование Android
Есть сервис RepeatingAlarmService Код public class RepeatingAlarmService extends BroadcastReceiver { @Override public...

Убрать диалог о включении GPS и иконку GPS. Тихий запуск GPS - Программирование Android
Здравствуйте! Подскажите есть ли возможность включить GPS в тихом режиме, чтобы пользователь не догадался об этом! На данном...

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

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

GPS координаты - Программирование Android
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ...

Работа с gps - Программирование Android
помогите пожалуйста! как получать скорость с помощью gps?

8
Gabberr
102 / 102 / 17
Регистрация: 13.10.2009
Сообщений: 403
07.11.2013, 17:18 #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;
    }
 
}
1
Last_Night
19 / 19 / 0
Регистрация: 02.10.2012
Сообщений: 124
07.11.2013, 17:34  [ТС] #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() из активити((
0
Gabberr
102 / 102 / 17
Регистрация: 13.10.2009
Сообщений: 403
07.11.2013, 17:58 #4
сперва создайте сервис в активити
Java
1
2
GPSTracker gpsTracker = new GPSTracker(this);
gpsTracker.getLocation();
при вызове метода getLatitude проверяйте значение на нул или поставьте дефолтные значения лат лон по нулям.
1
Last_Night
19 / 19 / 0
Регистрация: 02.10.2012
Сообщений: 124
07.11.2013, 18:13  [ТС] #5
Цитата Сообщение от Gabberr Посмотреть сообщение
сперва создайте сервис в активити
Java
1
2
GPSTracker gpsTracker = new GPSTracker(this);
gpsTracker.getLocation();
при вызове метода getLatitude проверяйте значение на нул или поставьте дефолтные значения лат лон по нулям.
при попытке подключить сервис в манифесте выдаёт ошибку
см в аттаче
0
Миниатюры
GPS service  
Last_Night
19 / 19 / 0
Регистрация: 02.10.2012
Сообщений: 124
07.11.2013, 20:25  [ТС] #6
разобрался, всё работает
спасибо!
0
Last_Night
19 / 19 / 0
Регистрация: 02.10.2012
Сообщений: 124
09.11.2013, 16:11  [ТС] #7
как остановить сервер?
через stopService(intent) не останавливается!
0
Gabberr
102 / 102 / 17
Регистрация: 13.10.2009
Сообщений: 403
10.11.2013, 13:35 #8
вот этим методом
Java
1
2
3
4
5
 public void stopUsingGPS() {
        if (locationManager != null) {
            locationManager.removeUpdates(GPSTracker.this);
        }
    }
1
AlexChe
0 / 0 / 0
Регистрация: 07.11.2013
Сообщений: 4
10.11.2013, 16:45 #9
Цитата Сообщение от Last_Night Посмотреть сообщение
как остановить сервер?
через stopService(intent) не останавливается!
ещё нужно завершить все процессы использующие сервис!
0
10.11.2013, 16:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.11.2013, 16:45
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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