2016-11-09 2 views
-2

Ich entwickle eine App mit Google Map, ich möchte den aktuellen Standort des Treibers seinem Administrator anzeigen. Wie zeige ich dem Administrator den aktuellen Standort an? Wie verfolge ich den aktuellen Standort und die Anzeige des Treibers an seinen Administrator?Wie kann ich den aktuellen Standort eines Nutzers auf der Google-Karte im Android Studio anzeigen?

Der folgende Code zeigt nur den aktuellen Standort des Treibers. In diesem wie zeige ich diesen Treiber aktuellen Standort zu seinem Administrator?

//java code 
    public class LocationActivity extends FragmentActivity implements 
      com.google.android.gms.location.LocationListener, 
      GoogleApiClient.ConnectionCallbacks, 
      GoogleApiClient.OnConnectionFailedListener { 

     private static final String TAG = "LocationActivity"; 
     private static final long INTERVAL = 1000 * 60 * 1; //1 minute 
     private static final long FASTEST_INTERVAL = 1000 * 60 * 1; // 1 minute 

     private static final float SMALLEST_DISPLACEMENT = 0.25F; //quarter of a meter 
     Button btnFusedLocation; 
     TextView tvLocation; 
     LocationRequest mLocationRequest; 
     GoogleApiClient mGoogleApiClient; 
     Location mCurrentLocation; 
     String mLastUpdateTime; 
     GoogleMap googleMap; 

     private double longitude; 
     private double latitude; 
     private ArrayList<LatLng> points; //added 
     Polyline line; //added 

     protected void createLocationRequest() { 
      mLocationRequest = new LocationRequest(); 
      mLocationRequest.setInterval(INTERVAL); 
      mLocationRequest.setFastestInterval(FASTEST_INTERVAL); 
      mLocationRequest.setSmallestDisplacement(SMALLEST_DISPLACEMENT); //added 
      mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
     } 
     /* 
     protected void createLocationRequest() { 
      mLocationRequest = new LocationRequest(); 
      mLocationRequest.setInterval(INTERVAL); 
      mLocationRequest.setFastestInterval(FASTEST_INTERVAL); 
      mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
     } */ 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      Log.d(TAG, "onCreate ..............................."); 

      points = new ArrayList<LatLng>(); 
      //show error dialog if GoolglePlayServices not available 
      if (!isGooglePlayServicesAvailable()) { 
       finish(); 
      } 
      createLocationRequest(); 
      mGoogleApiClient = new GoogleApiClient.Builder(this) 
        .addApi(LocationServices.API) 
        .addConnectionCallbacks(this) 
        .addOnConnectionFailedListener(this) 
        .build(); 

      setContentView(R.layout.activity_location_google_map); 
      SupportMapFragment fm = (SupportMapFragment) getSupportFragmentManager() 
        .findFragmentById(R.id.map); 
      googleMap = fm.getMap(); 
      googleMap.getUiSettings().setZoomControlsEnabled(true); 

     /* if (getIntent().getExtras() != null) { 
       final Bundle bundle = getIntent().getBundleExtra("LOCATION"); 
       latitude = bundle.getDouble("LATITUDE"); 
       longitude = bundle.getDouble("LONGITUDE"); */ 

     } 

     @Override 
     public void onStart() { 
      super.onStart(); 
      Log.d(TAG, "onStart fired .............."); 
      mGoogleApiClient.connect(); 
     } 

     @Override 
     public void onStop() { 
      super.onStop(); 
      Log.d(TAG, "onStop fired .............."); 
      mGoogleApiClient.disconnect(); 
      Log.d(TAG, "isConnected ...............: " + mGoogleApiClient.isConnected()); 
     } 

     private boolean isGooglePlayServicesAvailable() { 
      int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this); 
      if (ConnectionResult.SUCCESS == status) { 
       return true; 
      } else { 
       GooglePlayServicesUtil.getErrorDialog(status, this, 0).show(); 
       return false; 
      } 
     } 

     @Override 
     public void onConnected(Bundle bundle) { 
      Log.d(TAG, "onConnected - isConnected ...............: " + mGoogleApiClient.isConnected()); 
      startLocationUpdates(); 
     } 

     protected void startLocationUpdates() { 
      PendingResult<Status> pendingResult = LocationServices.FusedLocationApi.requestLocationUpdates(
        mGoogleApiClient, mLocationRequest, this); 
      Log.d(TAG, "Location update started ..............: "); 
     } 

     @Override 
     public void onConnectionSuspended(int i) { 

     } 

     @Override 
     public void onConnectionFailed(ConnectionResult connectionResult) { 
      Log.d(TAG, "Connection failed: " + connectionResult.toString()); 
     } 

     @Override 
     public void onLocationChanged(Location location) { 
      Log.d(TAG, "Firing onLocationChanged.............................................."); 
      mCurrentLocation = location; 
      mLastUpdateTime = DateFormat.getTimeInstance().format(new Date()); 
      addMarker(); 

      longitude = location.getLongitude(); 
      latitude = location.getLatitude(); 
      LatLng latLng = new LatLng(latitude, longitude); //you already have this 
      points.add(latLng); //added 
      redrawLine(); 
     } 

     private void addMarker() { 
      MarkerOptions options = new MarkerOptions(); 

      // following four lines requires 'Google Maps Android API Utility Library' 
      // https://developers.google.com/maps/documentation/android/utility/ 
      // I have used this to display the time as title for location markers 
      // you can safely comment the following four lines but for this info 
      IconGenerator iconFactory = new IconGenerator(this); 
      iconFactory.setStyle(IconGenerator.STYLE_PURPLE); 
      options.icon(BitmapDescriptorFactory.fromBitmap(iconFactory.makeIcon(mLastUpdateTime))); 
      options.anchor(iconFactory.getAnchorU(), iconFactory.getAnchorV()); 

      LatLng currentLatLng = new LatLng(mCurrentLocation.getLatitude(), mCurrentLocation.getLongitude()); 
      options.position(currentLatLng); 
      Marker mapMarker = googleMap.addMarker(options); 
      long atTime = mCurrentLocation.getTime(); 
      mLastUpdateTime = DateFormat.getTimeInstance().format(new Date(atTime)); 
      mapMarker.setTitle(mLastUpdateTime); 
      Log.d(TAG, "Marker added............................."); 
      googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(currentLatLng, 
        13)); 
      Log.d(TAG, "Zoom done............................."); 
     } 

     @Override 
     protected void onPause() { 
      super.onPause(); 
      stopLocationUpdates(); 
     } 

     protected void stopLocationUpdates() { 
      LocationServices.FusedLocationApi.removeLocationUpdates(
        mGoogleApiClient, this); 
      Log.d(TAG, "Location update stopped ......................."); 
     } 

     @Override 
     public void onResume() { 
      super.onResume(); 
      if (mGoogleApiClient.isConnected()) { 
       startLocationUpdates(); 
       Log.d(TAG, "Location update resumed ....................."); 
      } 
     } 

     // for map line 
     private void redrawLine(){ 

      googleMap.clear(); //clears all Markers and Polylines 
      PolylineOptions options = new PolylineOptions().width(5).color(Color.BLUE).geodesic(true); 
      for (int i = 0; i < points.size(); i++) { 
       LatLng point = points.get(i); 
       options.add(point); 
      } 
      addMarker(); //add Marker in current position 
      line = googleMap.addPolyline(options); //add Polyline 

     } 

    } 
+0

Sie brauchen dafür einen Backend-Server. –

+0

Speichere ich zuerst den Ort und zeige ihn dann an? – rohiH

Antwort

0

Dies könnte eine der Lösungen sein
1. den aktuellen Standort des Benutzers bekommen und es auf dem Server aktualisieren.
2. Verwenden Sie Firebase für Ihren Back-End-Server. Es macht viele Dinge einfacher. Speichern Sie den Standort des Benutzers in Firebase.
3. Rufen Sie im Admin-Steuerfeld den Standort des Benutzers vom Firebase ab.
Sie können Benachrichtigungen verwenden, um Administratoren über den aktuellen Standort des Benutzers zu benachrichtigen, sobald der Benutzer sie in Firebase aktualisiert hat.

+0

Kannst du mir bitte ein Beispiel nennen? – rohiH

Verwandte Themen