GPS üzerinde çok fazla test yaptıktan sonra, sonunda çözümü buldum. Android uygulaması arama yöneticisi ve GPS arama yapmaya başladığında, bir olay tetiklenir ve gps kilitli olduğunda da başka bir olay tetiklenir. Aşağıdaki kod, bunun nasıl yapıldığını gösterir.
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);
}
}
/* Bu * GPS durdu başlamış gibi çeşitli etkinlikler ortaya çıktığında GPSListener işlevi çağrıldığında ise, GPS O GPS kodu koymak için daha iyidir */
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;
}
}
};
kilitli * ve GPS konum bilgisi almak için servis olarak.
Her zaman, GPS işlevini çağırırsanız, GPSStatus dinleyicisi kaydedilir. GPS_SEARCHING tost, GPS aramaya başladığında sadece bir kez gelir ve GPS kilitliyken GPS_LOCKED tost ekranı görüntülenir. GPS fonksiyonunu tekrar ararsak, GPS_EVENT_FIRST_FIX olayı kilitliyse (GPS_LOCKED tost'unu gösterir) ve GPS aramaya başladıysa GPS_SEARCHING toastını göstermez (örn. GPS_STARTED olay tetiklenmez). GPS_EVENT_FIRST_FIX olayı tetiklendikten sonra GPSstatus dinleyicisi güncellemelerini kaldırıyorum.
GPS_EVENT_FIRST_FIX olayı tetiklendiğinde, en yeni GPS düzeltmesini almak için gpslastknownlocation() işlevini çağırmak daha iyidir. (Daha fazla bilgi için Android geliştiricileri sitesine bakmak daha iyidir).
Umarım bu başkalarına yardımcı olur ....
Belki bu işe yarıyor mu? http://stackoverflow.com/a/3712727/1318830 –
Bu kodu test etmedim, ancak baktığımda normal olanı görüyor: GPS Durumunda Değişen bir etkinlik için abone oluyor ve bekler. Yapmak istediğim şey şu anki durumu hemen bilmektir, örneğin mevcut durumu geri getirecek bir yöntem/api çağırmak gibi. –
Bu satırda, genel olarak http: // stackoverflow gibi nasıl kullanabileceğinizi daha geniş bir bakış açısı veren birçok cevap var.com/a/4084800/1318830 –