/[projects]/android/TrainInfo/src/dk/thoerup/traininfo/LocationLookup.java
ViewVC logotype

Contents of /android/TrainInfo/src/dk/thoerup/traininfo/LocationLookup.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1143 - (show annotations) (download)
Tue Sep 28 15:30:13 2010 UTC (13 years, 7 months ago) by torben
File size: 4110 byte(s)
Poll geo posisions from LocationLookup instead of pushing via a handler
1 package dk.thoerup.traininfo;
2
3 import java.util.List;
4
5 import android.content.Context;
6 import android.location.GpsSatellite;
7 import android.location.GpsStatus;
8 import android.location.Location;
9 import android.location.LocationListener;
10 import android.location.LocationManager;
11 import android.os.Bundle;
12 import android.util.Log;
13
14
15 public class LocationLookup implements LocationListener, GpsStatus.Listener {
16
17 public enum LookupStates {
18 GOTLOCATION,
19 NOPROVIDER,
20 STARTED,
21 IDLE
22 }
23
24 private LocationManager locManager;
25 private Context cntx;
26
27 private Location lastKnownLocation = null;
28 private Location savedLocation = null;
29 private int satCount;
30
31 private boolean hasGps;
32
33 private LookupStates state;
34
35 private long startTime;
36
37 public LocationLookup(Context c) {
38 state = LookupStates.IDLE;
39 cntx = c;
40 }
41
42
43 public boolean hasLocation() {
44 return savedLocation != null;
45 }
46
47 public Location getLocation()
48 {
49 return savedLocation;
50 }
51
52 public boolean hasGps() {
53 return hasGps;
54 }
55
56 public int getSatCount() {
57 return satCount;
58 }
59
60 public LookupStates getState() {
61 return state;
62 }
63
64 public Location getLastKnownLocation() {
65 return lastKnownLocation;
66 }
67
68 public long elapsedTime() {
69 long now = android.os.SystemClock.elapsedRealtime();
70
71 return now - startTime;
72 }
73
74 public void locateStations() {
75
76 state = LookupStates.STARTED;
77
78 hasGps = false;
79 locManager = (LocationManager) cntx.getSystemService(Context.LOCATION_SERVICE);
80 satCount = 0;
81
82 startTime = android.os.SystemClock.elapsedRealtime();
83
84 List<String> providers = locManager.getProviders(true);
85
86 if (providers.size() > 0) {
87 for(String provider : providers) {
88 Log.i("Provider", ""+provider);
89 if (provider.equalsIgnoreCase("gps")) {
90 locManager.addGpsStatusListener(this);
91 hasGps = true;
92 }
93
94 locManager.requestLocationUpdates(provider, 0, 0, this);
95 Location tmpLastKnown = locManager.getLastKnownLocation(provider);
96 if (tmpLastKnown != null) {
97 saveLastKnownLocation(tmpLastKnown);
98 }
99 }
100 } else {
101 // message that no suitable provider was found
102 //hndl.sendEmptyMessage(StationList.NOPROVIDER);
103 state = LookupStates.NOPROVIDER;
104
105 }
106 }
107 @Override
108 public void onLocationChanged(Location location) {
109 Log.i("Location", "Got location fix " + location.getLatitude() + ", " + location.getLongitude() + " accuracy=" + location.getAccuracy() + " provider=" +location.getProvider());
110
111
112 if (savedLocation == null || location.getAccuracy() < savedLocation.getAccuracy())
113 savedLocation = new Location(location); //save a copy
114
115 if (hasGps) {
116 if (!location.getProvider().equals("gps")) {
117 return; // at least give the gps a chance
118 } else if (location.getAccuracy() > 512) {
119 return; //if we have a gps provider lets wait for a more precise fix
120 }
121
122 }
123 stopSearch();
124 state = LookupStates.GOTLOCATION;
125
126 }
127
128 private void saveLastKnownLocation(Location loc) {
129 if (lastKnownLocation == null) {
130 lastKnownLocation = loc;
131 } else {
132 if (loc.getTime() > lastKnownLocation.getTime()) {//if loc is more recent than saved
133 lastKnownLocation = loc;
134 }
135 }
136 }
137
138 public void stopSearch()
139 {
140 if (state == LookupStates.STARTED) {
141 state = LookupStates.IDLE;
142 locManager.removeGpsStatusListener(this);
143 locManager.removeUpdates(this);
144 }
145 }
146
147
148 @Override
149 public void onProviderDisabled(String provider) {
150 }
151
152
153 @Override
154 public void onProviderEnabled(String provider) {
155 }
156
157
158 @Override
159 public void onStatusChanged(String provider, int status, Bundle extras) {
160 // TODO Auto-generated method stub
161
162 }
163
164
165 @Override //GpsStatus.Listener
166 public void onGpsStatusChanged(int event) {
167 if (event == GpsStatus.GPS_EVENT_SATELLITE_STATUS) {
168 int count = 0;
169 GpsStatus status = locManager.getGpsStatus(null);
170 for (GpsSatellite sat : status.getSatellites()) {
171 count ++;
172 }
173
174 satCount = count;
175 }
176
177 }
178 }

  ViewVC Help
Powered by ViewVC 1.1.20