Gps - Getting quotsatellites in viewquot and quotsatellites in usequot counts in Android

De openkb
Aller à : Navigation, rechercher

Sommaire

Questions

I am having an unusually difficult time getting correct "satellites in use" and "satellites in view" integers from my GPS implementation. I have reviewed numerous relevant Stackoverflow threads with no immediate enlightenment. Below is what I have so far that "should" work, however it does not. I ve rebuilt this several times from different perspectives without getting either the number of satellites in use or satellites in view. Thanks in advance...

public class GpsData extends Service implements LocationListener {
private GpsStatus mGpsStatus;
private final Context mContext;
boolean isGPSEnabled = false; // flag for GPS status
boolean isNetworkEnabled = false; // flag for network status
boolean canGetLocation = false; // flag for GPS status
Location location; // location
double dLatitude, dAltitude, dLongitude, dAccuracy, dSpeed, dSats; 
float fAccuracy, fSpeed;
long lSatTime;     // satellite time
String szSignalSource, szAltitude, szAccuracy, szSpeed;
public String szSatellitesInView; 
public String szSatellitesInUse;
public static String szSatTime;
private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 0; // 0 meters
private static final long MIN_TIME_BW_UPDATES = 1000; //1 sec
protected LocationManager locationManager;
protected GpsListener gpsListener = new GpsListener();

public GpsData(Context context) {
    this.mContext = context;
    getLocation();
    locationManager.addGpsStatusListener(gpsListener);  
}
class GpsListener implements GpsStatus.Listener{
    @Override
    public void onGpsStatusChanged(int event) {
        int iCountInView = 0;
        int iCountInUse = 0;            
        mGpsStatus = locationManager.getGpsStatus(mGpsStatus);          
        Iterable<GpsSatellite> satellites = mGpsStatus.getSatellites(); 
        if (satellites != null) {
            for (GpsSatellite gpsSatellite : satellites) {
                iCountInView++;
                if (gpsSatellite.usedInFix()) {
                    iCountInUse++;
                }
            }
        }
         {
             {
            szSatellitesInView = String.valueOf(iCountInView);          
            szSatellitesInUse = String.valueOf(iCountInUse);  
    }
    }   
public Location getLocation() {
    try {
        locationManager = (LocationManager) mContext.getSystemService(LOCATION_SERVICE);
        // getting GPS satellite status
        isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
        // getting cellular network status
        isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
        if (!isGPSEnabled && !isNetworkEnabled) {
            // no network provider is enabled
        } else {
            this.canGetLocation = true;
            // First get location from Network Provider
            if (isNetworkEnabled) {
                locationManager.addGpsStatusListener(gpsListener);//needed?
                locationManager.requestLocationUpdates(
                        LocationManager.NETWORK_PROVIDER,
                        MIN_TIME_BW_UPDATES,
                        MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                Log.d("Cell tower", "Cell tower");
                if (locationManager != null) {
                    location = locationManager
                            .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                    if (location != null) {
                        dLatitude = location.getLatitude();
                        dLongitude = location.getLongitude();
                        lSatTime = location.getTime();
                    }
                }
            }
            // if GPS Enabled get lat/long using GPS Services
            if (isGPSEnabled) {
                if (location == null) {
                    locationManager.addGpsStatusListener(gpsListener);
                    locationManager.requestLocationUpdates(
                            LocationManager.GPS_PROVIDER,
                            MIN_TIME_BW_UPDATES,
                            MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                    Log.d("GPS Enabled", "GPS Enabled");
                    if (locationManager != null) {
                        location = locationManager
                                .getLastKnownLocation(LocationManager.GPS_PROVIDER);
                        if (location != null) {
                            dLatitude = location.getLatitude();
                            dLongitude = location.getLongitude();
                            lSatTime = location.getTime();  
                        }
                    }
                }
            }
        }

    } catch (Exception e) {
        e.printStackTrace();
    }
    return location;
}

Answers

Got it.

public class GpsData extends Service implements LocationListener {

boolean isGPSEnabled = false; // flag for GPS satellite status
boolean isNetworkEnabled = false; // flag for cellular network status
boolean canGetLocation = false; // flag for either cellular or satellite status

private GpsStatus mGpsStatus;
private final Context mContext;
protected LocationManager locationManager;
protected GpsListener gpsListener = new GpsListener();

Location location; // location
double dLatitude, dAltitude, dLongitude, dAccuracy, dSpeed, dSats; 
float fAccuracy, fSpeed;
long lSatTime;     // satellite time
String szSignalSource, szAltitude, szAccuracy, szSpeed;

public String szSatellitesInUse, szSatellitesInView;
public static String szSatTime;
private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 0; // 0 meters
private static final long MIN_TIME_BW_UPDATES = 1000; //1 second

public GpsData(Context context) {
    this.mContext = context;
    getLocation();  
}
class GpsListener implements GpsStatus.Listener{
    @Override
    public void onGpsStatusChanged(int event) {
    }
}   
public Location getLocation() {
    try {
        locationManager = (LocationManager) mContext.getSystemService(LOCATION_SERVICE);
        isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);// getting GPS satellite status
        isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);// getting cellular network status
        if (!isGPSEnabled && !isNetworkEnabled) {
        } else {
            this.canGetLocation = true;
            if (isNetworkEnabled) {//GPS is enabled, getting lat/long via cellular towers
                locationManager.addGpsStatusListener(gpsListener);//inserted new
                locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,MIN_TIME_BW_UPDATES,MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                Log.d("Cell tower", "Cell tower");
                if (locationManager != null) {
                    location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                    if (location != null) {
                        szAltitude = " NA (using cell towers)";
                        szSatellitesInView = " NA (using cell towers)";
                        szSatellitesInUse = " NA (using cell towers)";          
                    }
                }
            }
            if (isGPSEnabled) {//GPS is enabled, gettoing lat/long via satellite
                if (location == null) {
                    locationManager.addGpsStatusListener(gpsListener);//inserted new
                    locationManager.getGpsStatus(null);
                    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,MIN_TIME_BW_UPDATES,MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                    Log.d("GPS Enabled", "GPS Enabled");
                    if (locationManager != null) {
                        location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
                        if (location != null) { 
                            dAltitude = location.getAltitude();
                            szAltitude = String.valueOf(dAltitude);
                            /**************************************************************
                             * Provides a count of satellites in view, and satellites in use
                             **************************************************************/
                            mGpsStatus = locationManager.getGpsStatus(mGpsStatus);          
                            Iterable<GpsSatellite> satellites = mGpsStatus.getSatellites();
                            int iTempCountInView = 0;
                            int iTempCountInUse = 0;
                            if (satellites != null) {
                                for (GpsSatellite gpsSatellite : satellites) {
                                    iTempCountInView++;
                                    if (gpsSatellite.usedInFix()) {
                                        iTempCountInUse++;
                                    }
                                }       
                            }   
                            szSatellitesInView = String.valueOf(iTempCountInView);
                            szSatellitesInUse = String.valueOf(iTempCountInUse);
                        }
                    }
                }
            }
        }

    } catch (Exception e) {
        e.printStackTrace();
    }
    return location;
}

Source

License : cc by-sa 3.0

http://stackoverflow.com/questions/26148235/getting-satellites-in-view-and-satellites-in-use-counts-in-android

Related

Outils personnels
Espaces de noms

Variantes
Actions
Navigation
Outils