2013-06-04 10 views
6

Nasuwa się pytanie dlaczego mój telefon (Galaxy Nexus, na wszelki wypadek) rozpoczyna się pokazując ikonę GPS na pasku stanu tuż po uruchomieniu aplikacji, ale nie kiedy się do ekranu z mapami i zacząć z nim pracować ? Nie muszę śledzić mojej lokalizacji i używać energii baterii, gdy nie znajduję się na ekranie mapy.

Na przykład komunikator aplikacji używa GPS do swojej mapy, ale ikona jest wyświetlana tylko po otwarciu ekranu mapy, a nie przy pierwszym uruchamianym działaniu.

Wyszukiwarka Google przez kilka godzin, ale nic nie znalazła. Każda pomoc zostanie doceniona!

Zmieniano:

klasa MapActivity

private LocationListener mLocationListener = new LocationListener() { 
    @Override 
    public void onLocationChanged(Location location) { 
    } 
    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 
    } 
    @Override 
    public void onProviderEnabled(String provider) { 
    } 
    @Override 
    public void onProviderDisabled(String provider) { 
    } 
}; 

@Override 
public void onCreate(Bundle savedState) { 
    super.onCreate(savedState); 
    setContentView(R.layout.map_activity); 

    startGPS(); 
    initMap(); 
    mMapView = (MapView) findViewById(R.id.map_google_map); 
    mMapView.onCreate(null); 
    mGoogleMap = mMapView.getMap(); 
    if (mGoogleMap != null) { 
     customizeGoogleMap(); 
     loadAndFillMap(); 
    } 
} 

private void startGPS() { 
    mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mLocationListener); 
} 

private void initMap() { 
    try { 
     MapsInitializer.initialize(this); 
    } catch (GooglePlayServicesNotAvailableException e) { 
     e.printStackTrace(); 
    } 
} 

private void customizeGoogleMap() { 
    mGoogleMap.getUiSettings().setMyLocationButtonEnabled(true); 
    mGoogleMap.setMyLocationEnabled(true); 
} 

private void loadAndFillMap() { 
    new LoadAndFillMapTask().execute(); 
} 

private class LoadAndFillMapTask extends AsyncTask<Void, Void, Void> { 
    @Override 
    protected Void doInBackground(Void... params) { 
     String address = Session.appData().getSelectedAddress(); 
     mMapLocation = Api.getMapApi().getMapLocation(address); 
     return null; 
    } 
    @Override 
    protected void onPostExecute(Void aVoid) { 
     fillMap(); 
    } 
} 

private void fillMap() { 
    // filling Google Map with markers etc. 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    if (mMapView != null) { 
     mMapView.onDestroy(); 
    } 
    mLocationManager.removeUpdates(mLocationListener); 
} 
+6

możemy zobaczyć niektóre kod głównej działalności proszę? – mithrop

+0

@mithrop Główna działalność nie zawiera absolutnie nic związanego z mapami google, szczerze mówiąc nie widzę sensu w pokazywaniu, co się tam dzieje. Co więcej, aplikacja uruchamia się z ekranem powitalnym (w tym momencie ikona GPS jest już wyświetlana na pasku stanu), która zawiera tylko intencję do głównej aktywności opóźnionej o 1 sekundę. – Makks129

Odpowiedz

11

Po pewnym czasie okazało się, że problem był w Flurry SDK używaliśmy w naszym projekcie ...

Domyślnie Flurry zaczyna zgłosić lokalizację bezpośrednio z aplikacji początku. Aby go wyłączyć użyliśmy:

FlurryAgent.setReportLocation(false); 

.../_-

+2

O, słodki Jesús, nigdy bym się nie dowiedział, co go spowodowało, gdyby nie ty! – Gerstmann

+0

@Gerstmann serdecznie zapraszamy :) – Makks129

+0

Zacząłem usuwać wszystko w mojej aplikacji i zacząłem ponownie włączać bit-by-bit kodu, aby dowiedzieć się, że to Flurry. Następnie, po wyszukaniu, pojawiło się twoje pytanie i odpowiedź. Szkoda, że ​​nie znalazłem go wcześniej. –

0

Będziesz musiał wdrożyć kolejną metodę lokalizacji-pobieraniem: Używanie GPS (tylko wtedy, gdy jest włączony), a następnie Wi-Fi, a następnie połączenie danych. Ponadto, oprócz FINE_LOCATION, należy użyć następującego too--

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/> 
+0

Czy możesz bardziej szczegółowo opisać "kolejną metodę pobierania lokalizacji"? Również z dokumentacji dotyczącej ACCESS_MOCK_LOCATION widać, że służy do testowania. – Makks129

+0

Staraj się postępować zgodnie z linkiem - http://developer.android.com/guide/topics/location/strategies.html Jeśli potrzebujesz szczegółowego kodu, lemie znasz i opublikuję go jako kolejną odpowiedź tutaj –

+0

Dzięki za odpowiedź, Kunal. Dodałem kod mojej klasy mapy powyżej. Próbowałem użyć podejścia opisanego w podanym łączu: zobacz mLocationListener, metoda startGPS, metoda OnDestroy. Jednak na moim Galaxy Nexus GPS nadal zaczyna się od początku aplikacji, a nie kiedy wchodzę na mapę. – Makks129

0

Nie jestem pewien, czy jest to najlepsze rozwiązanie, ale Użyłem this approach.

W mojej aktywności wyjścia robię tak:

@Override 
public void onCreate(Bundle savedState) { 
    super.onCreate(savedState); 
    if (GpsUtils.canToggleGps(this)) { 
     GpsUtils.turnGpsOff(this); 
    } 
    //... 
} 

I w moim MapActivity: ikona

@Override 
public void onCreate(Bundle savedState) { 
    super.onCreate(savedState); 
    if (GpsUtils.canToggleGps(this)) { 
     GpsUtils.turnGpsOn(this); 
    } 
    //... 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    if (GpsUtils.canToggleGps(this)) { 
     GpsUtils.turnGpsOff(this); 
    } 
    //... 
} 

GPS na pasku stanu nie przeszkadza mi już.

Powiązane problemy