Nachdem ich viele Tests mit GPS gemacht habe, fand ich endlich die Lösung. Wenn die Android-App den Standortmanager und das GPS-Gerät anruft, wird ein Ereignis ausgelöst und auch wenn GPS gesperrt ist, wird ein anderes Ereignis ausgelöst. Der folgende Code zeigt, wie dies zu tun ist.
locationManager = (LocationManager)mContext.getSystemService(LOCATION_SERVICE);
isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
if (isGPSEnabled) {
if (locationManager != null) {
// Register GPSStatus listener for events
locationManager.addGpsStatusListener(mGPSStatusListener);
gpslocationListener = new LocationListener() {
public void onLocationChanged(Location loc) {}
public void onStatusChanged(String provider, int status, Bundle extras) {}
public void onProviderEnabled(String provider) {}
public void onProviderDisabled(String provider) {}
};
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
MIN_TIME_BW_UPDATES_GPS, MIN_DISTANCE_CHANGE_FOR_UPDATES_GPS,
gpslocationListener);
}
}
/* * Dies ist GPSListener Funktion aufgerufen wird, wenn verschiedene Ereignisse eintritt wie * GPS gestartet, GPS gestoppt, GPS gesperrt */
public Listener mGPSStatusListener = new GpsStatus.Listener() {
public void onGpsStatusChanged(int event) {
switch(event) {
case GpsStatus.GPS_EVENT_STARTED:
Toast.makeText(mContext, "GPS_SEARCHING", Toast.LENGTH_SHORT).show();
System.out.println("TAG - GPS searching: ");
break;
case GpsStatus.GPS_EVENT_STOPPED:
System.out.println("TAG - GPS Stopped");
break;
case GpsStatus.GPS_EVENT_FIRST_FIX:
/*
* GPS_EVENT_FIRST_FIX Event is called when GPS is locked
*/
Toast.makeText(mContext, "GPS_LOCKED", Toast.LENGTH_SHORT).show();
Location gpslocation = locationManager
.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if(gpslocation != null) {
System.out.println("GPS Info:"+gpslocation.getLatitude()+":"+gpslocation.getLongitude());
/*
* Removing the GPS status listener once GPS is locked
*/
locationManager.removeGpsStatusListener(mGPSStatusListener);
}
break;
case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
// System.out.println("TAG - GPS_EVENT_SATELLITE_STATUS");
break;
}
}
};
Es ist besser, GPS-Code setzen in und als Service, um GPS-Standortinformationen zu erhalten.
Jedes Mal, wenn Sie die GPS-Funktion aufrufen, wird der GPSStatus-Listener registriert. GPS_SEARCHING Toast kommt nur einmal, wenn GPS gestartet wird, um zu suchen, und GPS_LOCKED Toast wird angezeigt, wenn GPS gesperrt ist. Wenn wir die GPS-Funktion erneut aufrufen, wird das Ereignis GPS_EVENT_FIRST_FIX ausgelöst, wenn es gesperrt ist (zeigt Toast mit GPS_LOCKED an) und wenn GPS bereits gestartet wurde, wird GPS_SEARCHING-Toast nicht angezeigt (d. H. GPS_STARTED-Ereignis wird nicht ausgelöst). Nachdem das GPS_EVENT_FIRST_FIX-Ereignis ausgelöst wurde, entferne ich die GPSstatus-Listener-Updates.
Wenn das Ereignis GPS_EVENT_FIRST_FIX ausgelöst wird, ist es besser, die Funktion gpslastknownlocation() aufzurufen, um den neuesten GPS-Fix zu erhalten (es ist besser, auf der Android-Entwickler-Website nach weiteren Informationen zu suchen).
Ich hoffe, dies wird anderen helfen ....
Vielleicht hilft das? http://StackOverflow.com/a/3712727/1318830 –
Ich habe diesen Code nicht getestet, aber indem ich es ansehe, scheint es das Übliche zu tun: abonniert und wartet auf ein GPS Status Changed Event. Ich möchte den aktuellen Status sofort wissen, wie zum Beispiel eine Methode/API aufrufen, die nur den aktuellen Status zurückgibt und das war's. –
gibt es viele Antworten in dieser Zeile, die im Allgemeinen eine breitere Sicht geben, wie Sie dazu http: // stackoverflow können.com/a/4084800/1318830 –