2017-04-07 6 views
-1

Ich möchte den aktualisierten Speicherort mit einem Intervall von 1 Minute bekommen, um den Marker auf der Karte und gleichzeitig, so dass die andere Anwendung meine sehen kann aktueller Standort, wenn ich mich bewege.So erhalten Sie den aktualisierten Standort mit einem Intervall von 1 Minute ANDROID

Also hier ist mein Code, aber traurig zu sagen, es wird den Standort nicht aktualisieren, auch wenn der Code bereits in der onLocationChanged Methode ist. Aber ich bin mir nicht sicher, ob mein Code stimmt.

@Override 
public void onLocationChanged(Location location) { 

    mLastLocation = location; 
    if (mCurrLocationMarker != null) { 
     mCurrLocationMarker.remove(); 
    } 
    latlng = new LatLng(location.getLatitude(), location.getLongitude()); 
    lat = String.valueOf(location.getLatitude()); 
    lLong = String.valueOf(location.getLongitude()); 

    driverID = pref.getString("driverID", ""); 

    final Query userName = ref.orderByChild("username").equalTo(username); 
    userName.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      for (DataSnapshot snapShot : dataSnapshot.getChildren()) { 
       if (!snapShot.child("latitude").equals(lat) || !snapShot.child("longitude").equals(lLong)) { 
        snapShot.getRef().child("latitude").setValue(lat); 
        snapShot.getRef().child("longitude").setValue(lLong); 
        snapShot.getRef().child("currentLocation").setValue(strOrigin); 
        Toast.makeText(MapsActivity.this, "old lat: " + snapShot.child("latitude").getValue().toString() + "\nnew lat: " + lat + 
          "\nold long: " + snapShot.child("longitude").getValue().toString() + "\nnew long: " + lLong, Toast.LENGTH_LONG).show(); 
       } 
      } 
      markerOptions = new MarkerOptions(); 
      markerOptions.position(latlng); 
      markerOptions.title("Current Location"); 
      markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_MAGENTA)); 
      mCurrLocationMarker = mMap.addMarker(markerOptions); 

      //move map camera 
      mMap.moveCamera(CameraUpdateFactory.newLatLng(latlng)); 
      mMap.animateCamera(CameraUpdateFactory.zoomTo(11)); 
     } 

     @Override 
     public void onCancelled(FirebaseError firebaseError) { 
      Toast.makeText(MapsActivity.this, "on cancelled child latlng: " + firebaseError.getMessage(), Toast.LENGTH_SHORT).show(); 
     } 
    }); 

    Geocoder geocoder; 
    List<android.location.Address> addresses; 
    geocoder = new Geocoder(this, Locale.getDefault()); 

    StringBuilder result = new StringBuilder(); 

    try { 
     addresses = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 1); 

     if (addresses.size() > 0) { 
      Address address = addresses.get(0); 
      result.append(address.getAddressLine(0)).append(", "); 
      result.append(address.getLocality()).append(", "); 
      result.append(address.getCountryName()); 
     } 

     strOrigin = result.toString(); 
     Toast.makeText(MapsActivity.this, "origin" + strOrigin, Toast.LENGTH_SHORT).show(); 
     // onSendOrigin(r); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    //stop location updates 
    if (mGoogleApiClient != null) { 
     LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this); 
    }\ 
} 
+0

Postleitzahl von LocationRequest –

+0

https://developers.google.com/android/reference/com/google/android/gms/location/LocationRequest –

Antwort

1

Es sieht aus wie Sie anrufen:

 LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this); 

innerhalb des OnLocationChanged Methode. Dadurch werden Standortaktualisierungen sofort nach dem ersten Aufruf von onLocationChanged beendet.

Versuchen Sie, diese Zeile zu entfernen und sehen Sie, ob sie funktioniert. Sie sollten removeLocationUpdates nur aufrufen, wenn Sie die Standortdienste nicht mehr verwenden oder wenn die App pausiert/gestoppt wird

+0

Es funktioniert, danke! – tin

Verwandte Themen