Je fais une application qui utilise le récepteur GPS. L'application fonctionnera sur toutes les versions à partir de 1.6. J'ai une icône satellite dans lequel je dis aux utilisateurs l'état actuel:Android GPS Status me rend fou
- si l'icône est rouge - gps désactivé
- si l'icône est orange - GPS est activé et essayer de fixer sur les satellites
- si l'icône est verte - le GPS est fixe et fonctionne correctement.
Après avoir lu ici, j'ai trouvé que certains événements déclencheur OnLocationChanged sur la version 1.6, mais plus tard, afin de prendre les conseils que je mis en place un auditeur GPS. J'ai un comportement vraiment bizarre car le statut de l'icône est désorganisé. Par exemple, j'active le GPS et devient orange ... après un vert fixe .. après quelques secondes se lit après une seconde orange et ainsi de suite ...
Voici le code que j'utilise. S'il vous plaît suggérer quoi changer
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();
}
}
A travaillé comme un rêve. Intéressant, je n'aurais pas pensé à ça. Merci de votre aide. – Alin