Android Listen For Change in GPS Status?

后端 未结 2 1821
花落未央
花落未央 2021-01-07 14:43

Hello I need to know how to listen for the following with the GPS in Android so I can update the UI in a PreferenceActivity. I have tried GpsStatus.Listen

2条回答
  •  说谎
    说谎 (楼主)
    2021-01-07 15:15

        mLocationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
    
        // Define a listener that responds to location updates
        mGPSStatusListener = new GpsStatus.Listener() {
            public void onGpsStatusChanged(int event) {
                switch (event) {
                case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
                    satelliteStatus = mLocationManager.getGpsStatus(null);
    
                    Iterable iSatellites = satelliteStatus
                            .getSatellites();
                    Iterator it = iSatellites.iterator();
                    maxsatellites = 0;
                    while (it.hasNext()) {
                        GpsSatellite oSat = (GpsSatellite) it.next();
                        statArray[maxsatellites][0] = oSat.getPrn();
                        statArray[maxsatellites][1] = oSat.getAzimuth();
                        statArray[maxsatellites][2] = oSat.getPrn();
                        statArray[maxsatellites][3] = oSat.getElevation();
                        statArray[maxsatellites][4] = oSat.getSnr();
                        if (oSat.usedInFix()) {
                            statArray[maxsatellites][5] = 1;
                        } else {
                            statArray[maxsatellites][5] = 0;
                        }
                        maxsatellites++;
                    }
    
                    if (mLastLocation != null)
                        if ((SystemClock.elapsedRealtime() - mLastLocationMillis) < 3000) {
                            isGPSFix = 7; // Enumeration for ONC_STAT_3D
                        } else {
                            isGPSFix = 2; // Enumeration for ONC_STAT_BAD_COVER
                        }
    
                    }
    
                    if (isGPSFix == 1) { // A fix has been acquired.
                        // Do something.
                    } else { // The fix has been lost.
                        // Do something.
                    }
    
                    break;
                case GpsStatus.GPS_EVENT_FIRST_FIX:
                    // Do something.
                    isGPSFix = 1;
                    break;
                case GpsStatus.GPS_EVENT_STOPPED:
                    if ((mLastLocation = mLocationManager
                            .getLastKnownLocation(LocationManager.GPS_PROVIDER)) != null) {
                        isGPSFix = 5; // Enumeration for                    } else {
                        isGPSFix = 2; // Enumeration for 
                    }
    
                }
            }
    
        };
    
        mGPSLocationListener = new LocationListener() {
            public void onLocationChanged(Location location) {
                // Called when a new location is found by the location
                // provider.
                if (location == null)
                    return;
    
                mLastLocationMillis = SystemClock.elapsedRealtime();
    
                // Do something.
    
                mLastLocation = location;
                            }
            }
    
            public void onProviderDisabled(String provider) {
                // TODO Auto-generated method stub
    
            }
    
            public void onProviderEnabled(String provider) {
                // TODO Auto-generated method stub
    
            }
    
            public void onStatusChanged(String provider, int status,
                    Bundle extras) {
                // TODO Auto-generated method stub
    
            }
        };
    
        mLocationManager.addGpsStatusListener(mGPSStatusListener);
    
    
        // Register the listener with the Location Manager to receive location
        // updates
        mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
                mUpdateIntervalInMillis, 0, mGPSLocationListener);
    

提交回复
热议问题