Android GPS-Status driving me nuts
Ich mache eine Anwendung, die den GPS-Empfänger. Die Anwendung funktioniert auf allen Versionen ab 1.6. Ich habe eine Sat-Symbol, in dem ich sagen die Benutzer den aktuellen status:
- wenn das Symbol rot ist, ist gps deaktiviert
- wenn Symbol ist orange - gps aktiviert ist und Sie versuchen, um fix auf die Satelliten
- wenn das Symbol grün ist - gps ist repariert und läuft gut.
Nach dem Lesen hier habe ich festgestellt, dass einige Veranstaltungen für die onLocationChanged-trigger auf 1.6 version, aber nicht später, so nehmen die Ratschläge, die ich umgesetzt habe eine GPS-listener. Ich habe einige wirklich seltsame Verhalten der status der icon-Durcheinander aus. Zum Beispiel habe ich GPS einschalten und bekommt, orange... nach einem Update erhalten, ist grün.. nach ein paar Sekunden bekommt zu Lesen, nachdem eine zweite orange und so weiter...
Hier ist der code, den ich verwenden. Bitte vorschlagen, was zu ändern
public class TrackExecutionActivity extends Activity{
protected static final long GPS_UPDATE_TIME_INTERVAL=3000; //millis
protected static final float GPS_UPDATE_DISTANCE_INTERVAL=0; //meters
private LocationManager mlocManager;
private MyGPSListener mGpsListener;
private LocationListener mlocListener;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.trackexecution);
imgGpsState = (ImageView)findViewById(R.id.imgGpsState);
mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
mlocListener = new MyLocationListener();
mGpsListener = new MyGPSListener();
}
private class MyGPSListener implements GpsStatus.Listener {
public void onGpsStatusChanged(int event) {
boolean isGPSFix = false;
switch (event) {
case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
if (mLastLocation != null)
isGPSFix = (SystemClock.elapsedRealtime() - mLastLocationMillis) < GPS_UPDATE_TIME_INTERVAL * 2;
if (isGPSFix) { //A fix has been acquired.
imgGpsState.setImageDrawable(ctx.getResources().getDrawable(R.drawable.gps_on_green));
} else { //The fix has been lost.
imgGpsState.setImageDrawable(ctx.getResources().getDrawable(R.drawable.gps_on_orange));
}
break;
case GpsStatus.GPS_EVENT_FIRST_FIX:
imgGpsState.setImageDrawable(ctx.getResources().getDrawable(R.drawable.gps_on_green));
break;
case GpsStatus.GPS_EVENT_STARTED:
imgGpsState.setImageDrawable(ctx.getResources().getDrawable(R.drawable.gps_on_orange));
break;
case GpsStatus.GPS_EVENT_STOPPED:
imgGpsState.setImageDrawable(ctx.getResources().getDrawable(R.drawable.gps_on_red));
break;
}
}
}
public class MyLocationListener implements LocationListener
{
public void onLocationChanged(Location location)
{
if (location != null) {
mLastLocationMillis = SystemClock.elapsedRealtime();
//do some things here
mLastLocation = location;
}
public void onProviderDisabled(String provider)
{
imgGpsState.setImageDrawable(ctx.getResources().getDrawable(R.drawable.gps_on_red));
}
public void onProviderEnabled(String provider)
{
imgGpsState.setImageDrawable(ctx.getResources().getDrawable(R.drawable.gps_on_orange));
}
//this doesn't trigger on Android 2.x users say
public void onStatusChanged(String provider, int status, Bundle extras)
{
}
}
}
@Override
protected void onResume() {
if(mlocManager != null) {
if (mGpsListener == null)
{
mGpsListener = new MyGPSListener();
}
if (mlocListener == null)
{
mlocListener = new MyLocationListener();
}
mlocManager.addGpsStatusListener(mGpsListener);
mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, GPS_UPDATE_TIME_INTERVAL, GPS_UPDATE_DISTANCE_INTERVAL, mlocListener);
}
super.onResume();
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
ändern:
sind ein boolean mit nicht-Boolesche Werte.. daher der seltsame Symbol, Verhalten während des gps-fixes müssen Sie festlegen, dass
isGPSfix
boolean irgendwo.. für den Fall derhasGPSfix
oderdoesnothaveGPSfix
..Haben Sie vielleicht gedacht: