7

çağrılmayı durdurdu Uygulamamızda, konumu izlemek için Fused Location Provider (FLP) kullandık. Zaman zaman uygulamanın konum geri bildiriminin aramayı durdurduğu bir duruma girebileceğini fark ettik. Söz konusu uygulama esas olarak iki tablette kullanılmaktadır (bir nexus 7 ve LG G-pad 8.3). Her iki cihazda da sorun olduğunu gördük. Genel olarak cihazın sıfırlanması, sorunu hafifletiyor gibi görünüyor. FLP'yi kullanmak için en iyi uygulamaların çoğunu takip ettiğimize inanıyoruz. Ancak, FLP'yi nasıl kullandığımızı gösteren bu örnek kodu bir araya getirdik.Fused Location Provider - onLocationChanged,

m_googleApiClient = builder 
       .addConnectionCallbacks(this) 
       .addOnConnectionFailedListener(this) 
       .addApi(LocationServices.API) 
       .build(); 
m_googleApiClient.connect() 

kez biz konum geri aramalar için dinlemeye başlamak bağlı:

bağlamak google API istemcisi alın ve çağrı

konum isteği şöyle
@Override 
public void onConnected(Bundle bundle) { 
    m_fusedLocationProviderApi.requestLocationUpdates(m_googleApiClient, m_locationRequest, this); 
} 

:

LocationRequest locationRequest = LocationRequest.create(); 
    locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
    locationRequest.setInterval(UPDATE_INTERVAL_IN_MILLISECONDS); 
    locationRequest.setFastestInterval(FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS); 

Ardından, geri bildirimi şu şekilde uygularız:

@Override 
public void onLocationChanged(Location location) { 
    // set location member var and record timestamp. 
} 

Sorunlar oluştuğunda, herhangi bir hata geri bildirimi almıyor gibi görünmüyor. Uzun zamandır GPS almadığımızı tespit ettiğimizde, google API istemcisindeki reset() 'i çağırmayı denedik. Ayrıca, her 2 saniyede bir zamanlayıcı kullanarak konum kullanılabilirliğini de izleriz (getLocationAvailable'i kullanarak). Genelde, kullanıcının aygıtını sıfırlamasının (gücü açma, kapatma) sorunu çözdüğünü görürüz.

Bizim sorular şunlardır:

  1. başkasının FLP ile bu sorunu fark etti mi?
  2. Kullanıcı sıfırlamaya başladığında sorunu çözmek için daha yapabileceğimiz bir şey var mı? Yer güncellemeleri yardımı eklensin mi?
  3. Sorunu teşhis etmek için toplayabileceğimiz/toplayacağımız daha fazla bilgi var mı?
+0

Aynı doğru sorunu yaşıyorum. Google Play Hizmetlerinin hangi sürümlerini kullanıyorsunuz ve bu cihazlarda hangi işletim sistemi sürümlerinin sizin için bir fark yaratıp yaratmadığını merak ettiniz mi? –

+0

Kısa bir süre önce 9.2 kullanmaya başladım.1 ve sorunu henüz görmedim (parmak çarpı işareti). – noahd

+1

Son zamanlarda aynı sorunu yaşıyorum. Google Play Hizmeti sürümünüzü yükselttikten sonra bu sorunu gördünüz mü? Teşekkür ederim. –

cevap

3

Ben cihazların geniş spektrumlu yoğun FusedLocationProvider ile çalıştım, GPS verisi arasında kötü yamalar vardı düşük seviye & üst uç ve gördük benzer sorunlar hem. Bu nedenle, & güvenilirlik ile ilgili bu konulara yönelik bir kaç değişiklik yaptım (aşağıda listelenen) ve bundan sonra bu sorunları görmedim. Tecrübelerime göre

, bu tür konulara olası çözümler şunlardır:

  1. güncellenmesi Play hizmetleri: 7.x aralığında ben kullanıyordum Android Play hizmetleri versiyonları - 8.x zaman Bu sorunlarım vardı.

    Sol: Yakın geçmişte, oyun hizmetlerinin 10.x sürümlerine güncelleme sorunların çözümünde yardımcı olmuştur. Bu sorunları güncellemeyi yayınlamadan görmedik, bu yüzden sizin de durumunuzdaki sebeplerden biri olabilir.

  2. & sağlam Android Servisi daha güvenilir yapma: Bu, GPS verileri de kesintileri gördüğümüz önemli nedenlerinden biridir ve cihazınızı yeniden başlatmayı veya yeniden kurulum başlatılırken, genellikle hizmetini yeniden başlatın. Ve böylece, tekrar başlayan hizmet, konum güncellemelerini normal hale getirebilir.

    Sol

    : Ben arka plan hizmetinin yerine Ön plan Hizmeti kullanmak ve bu burada çok en güvenilir çözümü ile ancak bu kullanıcı için bir yapışkan UI bildirim ile birlikte gelir. Bunun için değilse, o zaman arka plan hizmeti için bir sağlık kontrolü (koşma ya da öldürme) tutmak iyi bir seçenek olabilir. Bağlantı süspansiyon/hata üzerinde

  3. Yeniden bağlanıyor GoogleAPIClient ben GoogleAPIClient bağlantısı askıya alınabilir veya çünkü kötü ağ koşullarında veya başka nedenlerle bir hata döndürür durumları gördük. Bunun, konum verileri kaybıyla ilgili doğrudan etkisini doğrulayamasam da, bu durumun bir nedeni olabilir. Bunu desteklemek için, GoogleAPIClient bağlantı sorununun gerçekleşmesi durumunda yer güncellemelerinin sıfırlanması başarısız olacaktır ve bu sizin tarafınızdan da gözlemlenmiştir.

    Sol: askıya alınması veya hata GoogleAPIClient basit yeniden bağlanma çözebiliriz.

    Cihaz GPS kaybetti Düzeltildi:: zamanlar vardır cihaz kendi GPS bağlantısı kaybeder Bunun dışında

, bu konuda sorumlu olabilir bir neden daha var GPS verisinin geri dönmesine kadar GPS verilerinin yokluğuyla sonuçlanır. GPS düzeltmesi nedeniyle yerin kaybolup kaybolmadığını belirlemenin kesinlikle hiçbir yolu yoktur. Cihazın konum ayarlarının sıfırlanması, cihazın bir GPS düzeltmesi yapmaya teşebbüs etmesine neden olur; bu da muhtemelen buradaki sebep olabilir.

REDDİ: Ben HyperTrack @ bir Android Geliştirici duyuyorum ve onların uygulamalarında konum özelliklerini inşa ve bunlar bizim çözme edilmiş problemlerin tür geliştiriciler için bir konum yığınını geliştiriyoruz. SDKs numaralı telefonumuzu kullanarak benzer senaryoları test etmeniz sizin için harika olacaktır ve sorunu hala görmektense, sorunun kökünü bulmak ve sorunu çözmek için size yardımcı olmaktan mutluluk duyarız.

+0

Detaylı cevabı takdir ediyorum! – noahd

-2

Böyle LocationSettings kontrol etmek deneyebilirsiniz:

request = LocationRequest.create(); 
    LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder().addLocationRequest(request); 
    builder.setAlwaysShow(true); 
    PendingResult<LocationSettingsResult> result = 
      LocationServices.SettingsApi.checkLocationSettings(apiClient, builder.build()); 
    result.setResultCallback(new ResultCallback<LocationSettingsResult>() { 
     @Override 
     public void onResult(@NonNull LocationSettingsResult result) { 
      final Status status = result.getStatus(); 
      switch (status.getStatusCode()) { 
       case LocationSettingsStatusCodes.SUCCESS: 
        LocationServices.FusedLocationApi.requestLocationUpdates(apiClient, request, locationListener); 
        break; 
       case LocationSettingsStatusCodes.RESOLUTION_REQUIRED: 
        try { 
         status.startResolutionForResult(context, REQUEST_CODE); 
        } catch (IntentSender.SendIntentException e) {} 
        break; 
       case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE: 
        break; 
      } 
     } 
    }); 

o zaman yardımcı olmazsa ayarlar onActivityResult

switch (requestCode) { 
    case REQUEST_CODE: 
     switch (resultCode) { 
     case Activity.RESULT_OK: 
     // All required changes were successfully made 
     LocationServices.FusedLocationApi.requestLocationUpdates(apiClient, request, locationListener); 
     break; 
     case Activity.RESULT_CANCELED: 
     // The user was asked to change settings, but chose not to 
     break; 
     default: 
     break; 
     } 
    break; 
} 

yılında talep işlemek, google-play-hizmetlerini bozmak için deneyin sürümü.

+0

Evet Bu ayar kontrolünün farkındayım. Ayarlarla ilgili bir sorun olduğunu düşünmüyorum ... Çoğu zaman geri çağırıyorum. Mesele şu ki, bazen geri çağırma işleminin durduğu bir duruma geçtiğimizde, cihazın tekrar başlaması için sıfırlanması gerekiyor. – noahd