我想实现像uber或grap car的地图,其中会有司机和用户,在驱动程序应用程序中我想获取驱动程序的当前位置并在地图中放置一个实时标记,当驱动程序移动时移动,从用户端打开应用程序时,他可以看到所有现场的驱动程序,我无法找到明确的教程以及如何做到这一点,因为我准备好了解我可能使用onLocationChanged是意味着我一直发送驱动程序位置到数据库然后在用户应用程序中我调用这些位置并使用这些位置添加标记到地图我不相信这是正确的方法
class LocationUpdateListener implements LocationListener{
@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
// update your marker here
}
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
}
答案 0 :(得分:2)
您可以使用locationManager.requestLocationUpdates(provider, 400, 1, this);
进行请求位置更新,在onLocationChanged(Location location)
中,您可以在地图上显示驱动程序位置。在放一个引脚(即map.clear()
)
答案 1 :(得分:1)
正如您认为的那样糟糕,它会更快。您可以实施XMPP Service
以继续发送实时位置。 B'cos似乎更快实现并且需要更少的努力。
您可以发送推送(使用lat-long)onLocationChanged()
,而另一方服务将自动检测来自潜水员的推送。
This way您可以在应用中实施XMPP服务。
答案 2 :(得分:1)
好的做了一些研究后我发现它很容易做到,无论如何我发帖子以防万一有人需要它
1:在提供商方面,当位置发生变化时,我们将其发送到实时数据库
googleMap.setOnMyLocationChangeListener(new GoogleMap.OnMyLocationChangeListener() {
@Override
public void onMyLocationChange(Location location) {
latitudeLocation = location.getLatitude();
longitudeLocation = location.getLongitude();
LatLng p1 = new LatLng(latitudeLocation, longitudeLocation);
mMap.clear();
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(p1, 16));
database = FirebaseDatabase.getInstance();
myRef = database.getReference("Location");
myRef.setValue(latitudeLocation+","+longitudeLocation);
}
});
2:在用户端看到它在地图中
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
if (ContextCompat.checkSelfPermission(getContext(), android.Manifest.permission.ACCESS_FINE_LOCATION)
== PackageManager.PERMISSION_GRANTED) {
mMap.setMyLocationEnabled(true);
} else {
if (ContextCompat.checkSelfPermission(getContext(), android.Manifest.permission.ACCESS_COARSE_LOCATION)
== PackageManager.PERMISSION_GRANTED) {
mMap.setMyLocationEnabled(true);
} else {
}
}
mMap.getUiSettings().setCompassEnabled(false);
mMap.getUiSettings().setIndoorLevelPickerEnabled(false);
mMap.getUiSettings().setMapToolbarEnabled(false);
mMap.getUiSettings().setRotateGesturesEnabled(false);
mMap.getUiSettings().setZoomControlsEnabled(false);
LatLng p1 = new LatLng(latitudeLocation, longitudeLocation);
mylocation = mMap.addMarker(new MarkerOptions().position(p1).icon(BitmapDescriptorFactory.fromResource(R.drawable.track_order_d)));
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(p1, 16)); // 16 for the Zoom
database = FirebaseDatabase.getInstance();
myRef = database.getReference("Location");
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
value = dataSnapshot.getValue(String.class);
String [] separated = value.split(",");
String latPos = separated[0].trim();
String longiPos = separated[1].trim();
Double dlat = Double.parseDouble(latPos);
Double dlong = Double.parseDouble(longiPos);
drivers = new LatLng(dlat,dlong);
mMap.clear();
mMap.addMarker(new MarkerOptions().position(drivers).icon(BitmapDescriptorFactory.fromResource(R.drawable.collection_d)));
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
感谢所有试图提供帮助的人