2011-11-08 12 views
5

Uygulamamda, her iki konum sağlayıcısını kullanmak istiyorum.GPS ve Ağ sağlayıcı arasında nasıl geçiş yapabilirim?

Bu, eğer gps devre dışı bırakıldıysa, uygulamamın ağa geçmesini ve gps'nin tekrar açılmasını sağladığını gösterir.

Bu iki isteği işlemek için iki LocationListener kullanıyorum.

public void onStatusChanged(String provider, int status,Bundle extras) 
    switch (status) { 
     case LocationProvider.TEMPORARILY_UNAVAILABLE: 
      ...... 
      break; 
     case LocationProvider.OUT_OF_SERVICE 
      ..... 
      break; 
     case LocationProvider.AVAILABLE 
      ..... 
      break; 
} 

Ve her bir dinleyici içinde

, ben onStatusChanged() bu durumu algılar. Anlaşıldı, bu yöntem ilk değişiklikte (devre dışı bırakılmış ağ) kullanılacak, ancak ağı tekrar etkinleştirdiğimde hiçbir şey gösterilmiyor. Bu neydi? Dinleyici durumu her zaman tespit edemez mi ??

Lütfen bana yardım et, kodda çözüm yollaman iyi olurdu ... Teşekkürler!

+0

bakış. – user370305

+0

Guys, yeni çözüm, user370305 ve Fedor'un çalışmalarının birleşimidir. Fedor, doğru konum sağlayıcısını başlatmak ve seçmek için iyi bir iş yaptı. Ve user370305 yardımı ile. Ağ/gps durumunu tespit etmek için bir iş parçacığı başlatabiliriz. Çünkü, 'removeUpdates()' yaparsanız, dinleyici artık çalışmayacaktır. Yani, 'LocationProvider.AVAILABLE' durumda işe yaramaz. Sadece yeni bir istek yapmak için iş parçacığı kullanabilirsiniz. (Çok iyi bir şey olmadığını biliyorum, yani daha iyi bir çözüm varsa, lütfen bana bildirin, bunu görmeye bayılırım! Teşekkürler!) – alvan

cevap

2

Cevabınız burada What is the simplest and most robust way to get the user's current location in Android?. Bu Fedor'da, konum sağlayıcısı arasında nasıl geçiş yapılacağına dair örneklerle güzel bir şekilde açıklanmıştır.

Teşekkürler.

+0

I Fedor'un çalışmasının, hangi tedarikçinin başlangıç ​​aşamasında kullanılabileceğini belirlediğini düşünün. "IsProviderEnabled" işlevini algılamak için yeni bir konu açmalı mıyım diyorsun? – alvan

+0

tamam, [Android telefon internet bağlantısı yoksa sağlayıcı GPS_provider'a nasıl geçilir?] (Http://stackoverflow.com/questions/7776049/how-to-switch-provider-into-gps-provider-if- android-phone-doesnt-have-internet/7776108 # 7776108) cevabımda bu bakışta. ve sizin için yararlı olup olmadığını bana bildirin. – user370305

+0

Teşekkürler, kodunuz CONNECTIVITY_SERVICE adresini kontrol etmek için bir iş parçacığı başlatmam gerektiğini ima ediyor. – alvan

4

Bu benim yaptığım: Yeni Yorum benim de

public class LocationActivity extends Activity implements LocationListener{ 

    private TextView latituteField; 
    private TextView longitudeField; 
    private LocationManager locationManager; 
    private String provider; 
    private TextView outputField; 
    private Location location; 
    private ScrollView scrollView; 
    private Criteria criteria; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_location); 

     latituteField = (TextView) findViewById(R.id.lat_textView); 
     longitudeField = (TextView) findViewById(R.id.long_textView); 
     outputField = (TextView) findViewById(R.id.output_textView); 
     scrollView = (ScrollView) findViewById(R.id.scrollView1); 

     locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

     criteria = new Criteria(); 
     criteria.setAccuracy(Criteria.ACCURACY_FINE); 

     List<String> providers = locationManager.getProviders(criteria, true); 
     outputField.append("Providers available..." + "\n"); 
     for (String provider : providers) { 
      outputField.append(provider + "\n"); 
      scrollView.fullScroll(ScrollView.FOCUS_DOWN); 
     } 

     provider = locationManager.getBestProvider(criteria, true); 
     locationManager.requestLocationUpdates(provider, 400, 1, this); 

     if (provider != null) { 
      outputField.append("Provider " + provider + " has been selected." + "\n"); 
      scrollView.fullScroll(ScrollView.FOCUS_DOWN); 

      if (location != null) { 
       onLocationChanged(location); 
      } else { 
       latituteField.setText("Location not available"); 
       longitudeField.setText("Location not available"); 
      } 
      } else { 
      outputField.append("No provider selected" + "\n"); 
      scrollView.fullScroll(ScrollView.FOCUS_DOWN); 
      } 
    } 

    @Override 
     protected void onResume() { 
     super.onResume(); 
     locationManager.requestLocationUpdates(provider, 400, 1, this); 
     } 

    protected void onPause() { 
     super.onPause(); 
     locationManager.removeUpdates(this); 
     } 

    @Override 
    public void onLocationChanged(Location location) { 
     double lat =location.getLatitude(); 
     double lng =location.getLongitude(); 
     latituteField.setText(String.valueOf(lat)); 
     longitudeField.setText(String.valueOf(lng)); 
     outputField.append("New Location: " + String.valueOf(lat) + " " + String.valueOf(lng) + "\n"); 
     scrollView.fullScroll(ScrollView.FOCUS_DOWN); 
    } 

    @Override 
    public void onProviderDisabled(String dProvider) { 
     outputField.append("Provider " + dProvider + " has been disabled." + "\n"); 
     scrollView.fullScroll(ScrollView.FOCUS_DOWN); 

     provider = locationManager.getBestProvider(criteria, true); 
     locationManager.requestLocationUpdates(provider, 400, 1, this); 

     if (provider != null) { 
      outputField.append("Provider " + provider + " has been selected." + "\n"); 
      scrollView.fullScroll(ScrollView.FOCUS_DOWN); 

      if (location != null) { 
       onLocationChanged(location); 
      } else { 
       latituteField.setText("Location not available"); 
       longitudeField.setText("Location not available"); 
      } 
      } else { 
      outputField.append("No provider selected" + "\n"); 
      scrollView.fullScroll(ScrollView.FOCUS_DOWN); 
      } 
    } 

    @Override 
    public void onProviderEnabled(String eProvider) { 
     outputField.append("Provider " + eProvider + " has been enabled." + "\n"); 
     scrollView.fullScroll(ScrollView.FOCUS_DOWN); 

     provider = locationManager.getBestProvider(criteria, true); 
     locationManager.requestLocationUpdates(provider, 400, 1, this); 

     if (provider != null) { 
      outputField.append("Provider " + provider + " has been selected." + "\n"); 
      scrollView.fullScroll(ScrollView.FOCUS_DOWN); 

      if (location != null) { 
       onLocationChanged(location); 
      } else { 
       latituteField.setText("Location not available"); 
       longitudeField.setText("Location not available"); 
      } 
      } else { 
      outputField.append("No provider selected" + "\n"); 
      scrollView.fullScroll(ScrollView.FOCUS_DOWN); 
      } 
    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 
     outputField.append("Provider " + provider + " status changed to: " + Integer.toString(status) + "\n"); 
     scrollView.fullScroll(ScrollView.FOCUS_DOWN); 
    } 
} 
İlgili konular