/[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 1446 - (show annotations) (download)
Wed May 4 20:25:15 2011 UTC (13 years ago) by torben
File size: 3991 byte(s)
Add preferences
1 package dk.thoerup.traininfo;
2
3
4 import android.content.Context;
5 import android.content.SharedPreferences;
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.preference.PreferenceManager;
13 import android.util.Log;
14
15
16 public class LocationLookup implements LocationListener, GpsStatus.Listener {
17
18 public enum LookupStates {
19 GOTLOCATION,
20 NOPROVIDER,
21 STARTED,
22 IDLE
23 }
24
25 private LocationManager locManager;
26 private Context cntx;
27
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
65 public long elapsedTime() {
66 long now = android.os.SystemClock.elapsedRealtime();
67
68 return now - startTime;
69 }
70
71 public void locateStations() {
72
73 state = LookupStates.STARTED;
74
75 hasGps = false;
76 locManager = (LocationManager) cntx.getSystemService(Context.LOCATION_SERVICE);
77 satCount = 0;
78
79 startTime = android.os.SystemClock.elapsedRealtime();
80
81 boolean hasProvider = false;
82
83 SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(cntx);
84 String networkPref = prefs.getString("location", "GPS"); //default value is gps
85
86 if (networkPref.equals("GPS")) {
87 if (locManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
88 locManager.addGpsStatusListener(this);
89 locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
90
91 hasGps = true;
92 hasProvider = true;
93 }
94 }
95
96 if (locManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
97 locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this);
98 hasProvider = true;
99 }
100
101
102 if (hasProvider == false) {
103 // message that no suitable provider was found
104 //hndl.sendEmptyMessage(StationList.NOPROVIDER);
105 state = LookupStates.NOPROVIDER;
106
107 }
108 }
109 @Override
110 public void onLocationChanged(Location location) {
111 Log.i("Location", "Got location fix " + location.getLatitude() + ", " + location.getLongitude() + " accuracy=" + location.getAccuracy() + " provider=" +location.getProvider());
112
113
114 if (savedLocation == null || location.getAccuracy() < savedLocation.getAccuracy())
115 savedLocation = new Location(location); //save a copy
116
117 if (hasGps) {
118 if (!location.getProvider().equals("gps")) {
119 return; // at least give the gps a chance
120 } else if (location.getAccuracy() > 512) {
121 return; //if we have a gps provider lets wait for a more precise fix
122 }
123
124 }
125 stopSearch();
126 state = LookupStates.GOTLOCATION;
127
128 }
129
130
131 public void stopSearch()
132 {
133 if (state == LookupStates.STARTED) {
134 state = LookupStates.IDLE;
135 locManager.removeGpsStatusListener(this);
136 locManager.removeUpdates(this);
137 }
138 }
139
140
141 @Override
142 public void onProviderDisabled(String provider) {
143 }
144
145
146 @Override
147 public void onProviderEnabled(String provider) {
148 }
149
150
151 @Override
152 public void onStatusChanged(String provider, int status, Bundle extras) {
153 // TODO Auto-generated method stub
154
155 }
156
157
158 @Override //GpsStatus.Listener
159 public void onGpsStatusChanged(int event) {
160 if (event == GpsStatus.GPS_EVENT_SATELLITE_STATUS) {
161 int count = 0;
162 GpsStatus status = locManager.getGpsStatus(null);
163 for (GpsSatellite sat : status.getSatellites()) {
164 count ++;
165 }
166
167 satCount = count;
168 }
169
170 }
171 }

  ViewVC Help
Powered by ViewVC 1.1.20