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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1209 - (hide annotations) (download)
Sat Dec 25 21:44:00 2010 UTC (13 years, 5 months ago) by torben
File size: 3701 byte(s)
PassiveProvider is not enough
1 torben 237 package dk.thoerup.traininfo;
2    
3     import java.util.List;
4    
5     import android.content.Context;
6 torben 1142 import android.location.GpsSatellite;
7     import android.location.GpsStatus;
8 torben 237 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 torben 1142 public class LocationLookup implements LocationListener, GpsStatus.Listener {
16 torben 1143
17     public enum LookupStates {
18     GOTLOCATION,
19     NOPROVIDER,
20     STARTED,
21     IDLE
22     }
23 torben 319
24 torben 1143 private LocationManager locManager;
25     private Context cntx;
26 torben 237
27 torben 1143 private Location savedLocation = null;
28     private int satCount;
29 torben 286
30 torben 1143 private boolean hasGps;
31    
32     private LookupStates state;
33    
34     private long startTime;
35 torben 241
36 torben 1143 public LocationLookup(Context c) {
37     state = LookupStates.IDLE;
38 torben 237 cntx = c;
39     }
40    
41 torben 285
42     public boolean hasLocation() {
43     return savedLocation != null;
44     }
45 torben 319
46     public Location getLocation()
47     {
48     return savedLocation;
49     }
50 torben 488
51 torben 1143 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 torben 237
70     public void locateStations() {
71 torben 336
72 torben 1143 state = LookupStates.STARTED;
73 torben 336
74 torben 286 hasGps = false;
75 torben 237 locManager = (LocationManager) cntx.getSystemService(Context.LOCATION_SERVICE);
76 torben 1143 satCount = 0;
77    
78     startTime = android.os.SystemClock.elapsedRealtime();
79 torben 286
80 torben 288 List<String> providers = locManager.getProviders(true);
81 torben 241
82 torben 1209 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 torben 1142
96 torben 1209 locManager.requestLocationUpdates(provider, 0, 0, this);
97     }
98    
99     if (hasProvider == false) {
100 torben 237 // message that no suitable provider was found
101 torben 1142 //hndl.sendEmptyMessage(StationList.NOPROVIDER);
102 torben 1143 state = LookupStates.NOPROVIDER;
103 torben 1142
104 torben 237 }
105     }
106     @Override
107 torben 1143 public void onLocationChanged(Location location) {
108 torben 237 Log.i("Location", "Got location fix " + location.getLatitude() + ", " + location.getLongitude() + " accuracy=" + location.getAccuracy() + " provider=" +location.getProvider());
109 torben 336
110 torben 237
111 torben 286 if (savedLocation == null || location.getAccuracy() < savedLocation.getAccuracy())
112     savedLocation = new Location(location); //save a copy
113 torben 241
114 torben 286 if (hasGps) {
115     if (!location.getProvider().equals("gps")) {
116     return; // at least give the gps a chance
117 torben 948 } else if (location.getAccuracy() > 512) {
118 torben 286 return; //if we have a gps provider lets wait for a more precise fix
119     }
120 torben 237
121 torben 286 }
122 torben 336 stopSearch();
123 torben 1143 state = LookupStates.GOTLOCATION;
124    
125 torben 241 }
126 torben 336
127 torben 488
128 torben 336 public void stopSearch()
129     {
130 torben 1143 if (state == LookupStates.STARTED) {
131     state = LookupStates.IDLE;
132 torben 1142 locManager.removeGpsStatusListener(this);
133 torben 336 locManager.removeUpdates(this);
134     }
135     }
136 torben 319
137 torben 237
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 torben 1142
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 torben 1143 }
163 torben 1142
164 torben 1143 satCount = count;
165 torben 1142 }
166    
167     }
168 torben 237 }

  ViewVC Help
Powered by ViewVC 1.1.20