/[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 1209 - (show annotations) (download)
Sat Dec 25 21:44:00 2010 UTC (13 years, 4 months ago) by torben
File size: 3701 byte(s)
PassiveProvider is not enough
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 savedLocation = null;
28 private int satCount;
29
30 private boolean hasGps;
31
32 private LookupStates state;
33
34 private long startTime;
35
36 public LocationLookup(Context c) {
37 state = LookupStates.IDLE;
38 cntx = c;
39 }
40
41
42 public boolean hasLocation() {
43 return savedLocation != null;
44 }
45
46 public Location getLocation()
47 {
48 return savedLocation;
49 }
50
51 public boolean hasGps() {
52 return hasGps;
53 }
54
55 public int getSatCount() {
56 return satCount;
57 }
58
59 public LookupStates getState() {
60 return state;
61 }
62
63
64 public long elapsedTime() {
65 long now = android.os.SystemClock.elapsedRealtime();
66
67 return now - startTime;
68 }
69
70 public void locateStations() {
71
72 state = LookupStates.STARTED;
73
74 hasGps = false;
75 locManager = (LocationManager) cntx.getSystemService(Context.LOCATION_SERVICE);
76 satCount = 0;
77
78 startTime = android.os.SystemClock.elapsedRealtime();
79
80 List<String> providers = locManager.getProviders(true);
81
82 boolean hasProvider = false;
83
84 for(String provider : providers) {
85 if (provider.equals( LocationManager.PASSIVE_PROVIDER)) {
86 continue;
87 }
88
89 Log.i("Provider", ""+provider);
90 hasProvider = true;
91 if (provider.equalsIgnoreCase("gps")) {
92 locManager.addGpsStatusListener(this);
93 hasGps = true;
94 }
95
96 locManager.requestLocationUpdates(provider, 0, 0, this);
97 }
98
99 if (hasProvider == false) {
100 // message that no suitable provider was found
101 //hndl.sendEmptyMessage(StationList.NOPROVIDER);
102 state = LookupStates.NOPROVIDER;
103
104 }
105 }
106 @Override
107 public void onLocationChanged(Location location) {
108 Log.i("Location", "Got location fix " + location.getLatitude() + ", " + location.getLongitude() + " accuracy=" + location.getAccuracy() + " provider=" +location.getProvider());
109
110
111 if (savedLocation == null || location.getAccuracy() < savedLocation.getAccuracy())
112 savedLocation = new Location(location); //save a copy
113
114 if (hasGps) {
115 if (!location.getProvider().equals("gps")) {
116 return; // at least give the gps a chance
117 } else if (location.getAccuracy() > 512) {
118 return; //if we have a gps provider lets wait for a more precise fix
119 }
120
121 }
122 stopSearch();
123 state = LookupStates.GOTLOCATION;
124
125 }
126
127
128 public void stopSearch()
129 {
130 if (state == LookupStates.STARTED) {
131 state = LookupStates.IDLE;
132 locManager.removeGpsStatusListener(this);
133 locManager.removeUpdates(this);
134 }
135 }
136
137
138 @Override
139 public void onProviderDisabled(String provider) {
140 }
141
142
143 @Override
144 public void onProviderEnabled(String provider) {
145 }
146
147
148 @Override
149 public void onStatusChanged(String provider, int status, Bundle extras) {
150 // TODO Auto-generated method stub
151
152 }
153
154
155 @Override //GpsStatus.Listener
156 public void onGpsStatusChanged(int event) {
157 if (event == GpsStatus.GPS_EVENT_SATELLITE_STATUS) {
158 int count = 0;
159 GpsStatus status = locManager.getGpsStatus(null);
160 for (GpsSatellite sat : status.getSatellites()) {
161 count ++;
162 }
163
164 satCount = count;
165 }
166
167 }
168 }

  ViewVC Help
Powered by ViewVC 1.1.20