/[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 1142 - (show annotations) (download)
Tue Sep 28 14:58:45 2010 UTC (13 years, 7 months ago) by torben
File size: 3826 byte(s)
When using gps provider, show satellite count to the user
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.os.Handler;
13 import android.os.Message;
14 import android.util.Log;
15
16
17 public class LocationLookup implements LocationListener, GpsStatus.Listener {
18
19 LocationManager locManager;
20 Context cntx;
21 Handler hndl;
22
23 Location lastKnownLocation = null;
24 Location savedLocation = null;
25
26 boolean isSearching = false;
27 boolean hasGps;
28
29 public LocationLookup(Context c, Handler h) {
30 cntx = c;
31 hndl = h;
32 }
33
34
35 public boolean hasLocation() {
36 return savedLocation != null;
37 }
38
39 public Location getLocation()
40 {
41 return savedLocation;
42 }
43
44 public Location getLastKnownLocation() {
45 return lastKnownLocation;
46 }
47
48 public void locateStations() {
49
50 isSearching = true;
51
52 hasGps = false;
53 locManager = (LocationManager) cntx.getSystemService(Context.LOCATION_SERVICE);
54
55 List<String> providers = locManager.getProviders(true);
56
57 if (providers.size() > 0) {
58 for(String provider : providers) {
59 Log.i("Provider", ""+provider);
60 if (provider.equalsIgnoreCase("gps")) {
61 locManager.addGpsStatusListener(this);
62 hasGps = true;
63 }
64
65 locManager.requestLocationUpdates(provider, 0, 0, this);
66 Location tmpLastKnown = locManager.getLastKnownLocation(provider);
67 if (tmpLastKnown != null) {
68 saveLastKnownLocation(tmpLastKnown);
69 }
70 }
71 } else {
72 // message that no suitable provider was found
73 //hndl.sendEmptyMessage(StationList.NOPROVIDER);
74 hndl.sendEmptyMessage(StationList.LookupStates.NOPROVIDER.ordinal());
75
76 }
77 }
78 @Override
79 public void onLocationChanged(Location location) {
80 if (isSearching == false)
81 return;
82
83 Log.i("Location", "Got location fix " + location.getLatitude() + ", " + location.getLongitude() + " accuracy=" + location.getAccuracy() + " provider=" +location.getProvider());
84
85
86 if (savedLocation == null || location.getAccuracy() < savedLocation.getAccuracy())
87 savedLocation = new Location(location); //save a copy
88
89 if (hasGps) {
90 if (!location.getProvider().equals("gps")) {
91 return; // at least give the gps a chance
92 } else if (location.getAccuracy() > 512) {
93 return; //if we have a gps provider lets wait for a more precise fix
94 }
95
96 }
97 stopSearch();
98 hndl.sendEmptyMessage(StationList.LookupStates.GOTLOCATION.ordinal());
99 }
100
101 private void saveLastKnownLocation(Location loc) {
102 if (lastKnownLocation == null) {
103 lastKnownLocation = loc;
104 } else {
105 if (loc.getTime() > lastKnownLocation.getTime()) {//if loc is more recent than saved
106 lastKnownLocation = loc;
107 }
108 }
109 }
110
111 public void stopSearch()
112 {
113 if (isSearching) {
114 isSearching = false;
115 locManager.removeGpsStatusListener(this);
116 locManager.removeUpdates(this);
117 }
118 }
119
120
121 @Override
122 public void onProviderDisabled(String provider) {
123 }
124
125
126 @Override
127 public void onProviderEnabled(String provider) {
128 }
129
130
131 @Override
132 public void onStatusChanged(String provider, int status, Bundle extras) {
133 // TODO Auto-generated method stub
134
135 }
136
137
138 @Override //GpsStatus.Listener
139 public void onGpsStatusChanged(int event) {
140 if (event == GpsStatus.GPS_EVENT_SATELLITE_STATUS) {
141 int count = 0;
142 GpsStatus status = locManager.getGpsStatus(null);
143 for (GpsSatellite sat : status.getSatellites()) {
144 count ++;
145 }
146
147 Message msg = new Message();
148 msg.what = StationList.LookupStates.GPS_SAT_COUNT.ordinal();
149 msg.arg1 = count;
150 hndl.sendMessage(msg);
151 }
152
153 }
154 }

  ViewVC Help
Powered by ViewVC 1.1.20