您好我目前正在开发Android应用程序中的资产跟踪项目。
这就是我所拥有的:
我已经实施了资产跟踪应用程序,他们每3秒广播一次他们的位置,我使用google firebase的实时数据库来存储这些数据。
我有一个跟踪显示应用,它将显示资产的当前位置
它只显示资产的当前位置。
但是我需要使用跟踪应用程序从资产启动服务的位置绘制折线,直到资产的当前位置。
我对google map api有非常基本的想法。
提前致谢。 bellow是显示资产位置的代码。
public class DisplayActivity extends FragmentActivity implements OnMapReadyCallback {
private static final String TAG = DisplayActivity.class.getSimpleName();
private HashMap<String, Marker> mMarkers = new HashMap<>();
private GoogleMap mMap;
private AutoCompleteTextView autoCompleteTextView;
private ArrayList<LatLng> points; //added
Polyline line; //added
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display);
autoCompleteTextView=(AutoCompleteTextView)findViewById(R.id.autoCompleteTextView);
autoCompleteTextView.setSingleLine(true);
autoCompleteTextView.setImeOptions(EditorInfo.IME_ACTION_SEARCH);
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
points = new ArrayList<LatLng>(); //added
}
@Override
public void onMapReady(GoogleMap googleMap) {
// Authenticate with Firebase when the Google map is loaded
mMap = googleMap;
mMap.setMaxZoomPreference(16);
loginToFirebase();
}
private void loginToFirebase() {
String email = getString(R.string.firebase_email);
String password = getString(R.string.firebase_password);
// Authenticate with Firebase and subscribe to updates
FirebaseAuth.getInstance().signInWithEmailAndPassword(
email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(Task<AuthResult> task) {
if (task.isSuccessful()) {
subscribeToUpdates();
Log.d(TAG, "firebase auth success");
} else {
Log.d(TAG, "firebase auth failed");
}
}
});
}
private void subscribeToUpdates() {
DatabaseReference ref = FirebaseDatabase.getInstance().getReference(getString(R.string.firebase_path));
ref.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String previousChildName) {
setMarker(dataSnapshot);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String previousChildName) {
setMarker(dataSnapshot);
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String previousChildName) {
setMarker(dataSnapshot);
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onCancelled(DatabaseError error) {
Log.d(TAG, "Failed to read value.", error.toException());
}
});
}
private void setMarker(DataSnapshot dataSnapshot) {
String key = dataSnapshot.getKey();
HashMap<String, Object> value = (HashMap<String, Object>) dataSnapshot.getValue();
double lat = Double.parseDouble(value.get("latitude").toString());
double lng = Double.parseDouble(value.get("longitude").toString());
LatLng location = new LatLng(lat, lng);
if (!mMarkers.containsKey(key)) {
mMarkers.put(key, mMap.addMarker(new MarkerOptions().title(key).position(location)));
} else {
mMarkers.get(key).setPosition(location);
}
LatLngBounds.Builder builder = new LatLngBounds.Builder();
for (Marker marker : mMarkers.values()) {
builder.include(marker.getPosition());
}
mMap.animateCamera(CameraUpdateFactory.newLatLngBounds(builder.build(), 300));
}
}