2016-11-08 173 views
0

我正在開發一個應用程序使用谷歌地圖,我想顯示多個用戶的位置到谷歌地圖上的一個管理員。以下是僅顯示用戶當前位置的代碼。現在請告訴我如何在Google地圖上顯示多個用戶位置?如何顯示多個用戶在谷歌地圖上的當前位置android

//java activity 
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 

    } 
} 
+1

調用添加不同經度和緯度的多次標記方法。 –

回答

0

您可以添加多個標記對應於不同用戶的位置。

+1

您可以提交而不是回答。 –

+0

那麼這個問題的答案是什麼@DheerubhaiBansal –

+1

這是答案,但你可以評論它。 –

相關問題