В настоящее время я работаю над проектом Android, который содержит карту Google. В общем, я хотел бы имитировать c приложение Google Map, например Uber
.
Все работает нормально, пока я пытался загрузить карту и поставить некоторые маркеры. Однако, когда я пытаюсь использовать местоположение пользователя с помощью FusedLocationProviderClient
API (я также пытался LocationService
), я обнаружил, что что-то не так.
Вопрос 1: синяя точка не указывает на правильную направление.
После того, как я установил mMap.setMyLocationEnabled (true); моя карта Google показывает синюю точку на моем текущем местоположении, однако я обнаружил, что значок стрелки рядом с синей точкой продолжает меняться. он продолжает указывать в разные стороны, даже если мое устройство не используется.
Кроме того, когда я держу телефон и поворачиваюсь, стрелка не следовала моему направлению. Он указывал в одном направлении, а затем начал произвольно указывать в другом направлении.
Я думал, что это из-за проблемы с дверным GPS, но я обнаружил, что приложение Uber работает довольно хорошо, даже если я нахожусь в двери, его стрелка будет бездействовать, когда устройство также бездействует. Он также следует направлению коррекции, если я указываю свое устройство в других направлениях.
Вопрос 2: нормально ли выглядит следующее расстояние, когда мой телефон бездействует?
Мне нужно знать расстояние между предыдущими местоположение и текущее местоположение, поэтому я пытаюсь сделать проверку расстояния. Это расстояние между предыдущим и текущим местоположениями
2020-05-04 12:04:21.070 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 1.5038121
2020-05-04 12:04:26.091 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 0.50295484
2020-05-04 12:04:31.097 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 1.3108326
2020-05-04 12:04:36.096 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 2.4139225
2020-05-04 12:04:41.205 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 2.1584768
2020-05-04 12:04:46.198 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 2.2711768
2020-05-04 12:04:51.211 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 0.08597783
2020-05-04 12:04:56.232 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 0.760637
2020-05-04 12:05:01.261 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 2.089465
2020-05-04 12:05:06.240 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 1.0365933
2020-05-04 12:05:11.267 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 1.1566907
2020-05-04 12:05:16.264 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 0.8427341
2020-05-04 12:05:21.279 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 0.58557934
2020-05-04 12:05:26.285 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 3.2938805
2020-05-04 12:05:31.292 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 0.9893668
2020-05-04 12:05:36.331 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 2.7121341
2020-05-04 12:05:41.332 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 0.58402115
2020-05-04 12:05:46.344 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 1.9808306
2020-05-04 12:05:51.366 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 0.7350315
2020-05-04 12:05:56.365 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 1.9991529
2020-05-04 12:06:01.376 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 0.82994956
2020-05-04 12:06:06.388 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 0.25110307
2020-05-04 12:06:11.398 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 3.2848485
2020-05-04 12:06:16.420 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 3.0712829
2020-05-04 12:06:21.433 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 1.4766173
2020-05-04 12:06:26.437 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 1.1580448
2020-05-04 12:06:31.440 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 0.6341426
2020-05-04 12:06:36.406 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 0.95563394
2020-05-04 12:06:41.441 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 1.2747765
2020-05-04 12:06:46.470 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 0.6824539
2020-05-04 12:06:51.474 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 0.81538767
2020-05-04 12:06:56.495 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 1.6574001
2020-05-04 12:07:01.502 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 1.55347
2020-05-04 12:07:06.528 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 1.6440722
2020-05-04 12:07:11.518 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 3.2367163
2020-05-04 12:07:16.528 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 2.576167
2020-05-04 12:07:21.559 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 2.828991
2020-05-04 12:07:26.564 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 1.0584937
2020-05-04 12:07:31.594 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 2.410923
2020-05-04 12:07:36.595 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 2.23837
2020-05-04 12:07:41.610 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 0.7337533
2020-05-04 12:07:46.627 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 0.685982
2020-05-04 12:07:51.632 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 1.2016857
2020-05-04 12:07:56.652 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 1.6246486
2020-05-04 12:08:01.661 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 0.8495682
2020-05-04 12:08:06.649 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 1.5483402
2020-05-04 12:08:11.676 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 0.52265835
2020-05-04 12:08:16.696 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 0.62016475
2020-05-04 12:08:21.675 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 1.3450649
2020-05-04 12:08:26.688 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 0.92939544
2020-05-04 12:08:31.724 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 2.1672235
2020-05-04 12:08:36.756 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 1.045718
2020-05-04 12:08:41.751 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 0.7121414
2020-05-04 12:08:46.765 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 1.7538644
2020-05-04 12:08:51.759 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 0.47356036
2020-05-04 12:08:56.776 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 0.9650086
2020-05-04 12:09:01.771 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 1.0943055
2020-05-04 12:09:06.796 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 2.538518
2020-05-04 12:09:11.805 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 1.4008077
2020-05-04 12:09:16.822 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 1.3884314
2020-05-04 12:09:21.809 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 0.7564086
2020-05-04 12:09:26.848 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 0.545983
2020-05-04 12:09:31.854 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 0.8287819
2020-05-04 12:09:36.868 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 0.7461233
2020-05-04 12:09:41.885 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 1.6607237
2020-05-04 12:09:46.882 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 0.4259954
2020-05-04 12:09:51.923 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 0.83724153
2020-05-04 12:09:56.918 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 1.2476121
2020-05-04 12:10:01.919 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 1.049333
2020-05-04 12:10:06.917 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 1.1160439
2020-05-04 12:10:11.942 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 0.8286888
2020-05-04 12:10:16.954 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 2.2954304
2020-05-04 12:10:21.969 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 1.8861461
2020-05-04 12:10:26.975 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 2.4781
2020-05-04 12:10:31.971 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 0.65864164
2020-05-04 12:10:37.029 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 1.473911
2020-05-04 12:10:42.063 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 3.1063082
2020-05-04 12:10:47.045 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 0.3217563
2020-05-04 12:10:52.079 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 1.4933107
2020-05-04 12:10:57.081 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 1.1625054
2020-05-04 12:11:02.083 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 2.129707
2020-05-04 12:11:07.077 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 1.7530112
2020-05-04 12:11:12.107 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 2.0084534
2020-05-04 12:11:17.125 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 1.1210152
2020-05-04 12:11:22.110 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 0.69349605
2020-05-04 12:11:27.129 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 0.42011544
2020-05-04 12:11:32.143 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 1.3105934
2020-05-04 12:11:37.161 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 0.09590283
2020-05-04 12:11:42.172 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 0.610572
2020-05-04 12:11:47.166 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 4.0301495
2020-05-04 12:11:52.187 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 0.3647536
2020-05-04 12:11:57.181 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 0.55184
2020-05-04 12:12:02.200 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 2.727611
2020-05-04 12:12:07.218 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 1.1821231
2020-05-04 12:12:12.216 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 1.569578
2020-05-04 12:12:17.234 30675-30675/com.lucienchu.fusedlocationclient I/MapsActivity: onLocationResult: distance: 0.4277509
имеет ли смысл это расстояние, когда я тестирую эту функцию в дверях, но мое устройство не используется?
Я сделал ту же проверку с API LocationService но я обнаружил, что результат, который он мне дал, еще хуже, чем мог предложить API FusedLocationClient.
Ниже приводится мой MapsActivity
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {
private static final String TAG = "MapsActivity";
private GoogleMap mMap;
private int locationRequestCode = 1000;
private double wayLatitude = 0.0, wayLongitude = 0.0;
private FusedLocationProviderClient mFusedLocationClient;
private LocationRequest locationRequest;
private LocationCallback locationCallback;
Location previousLocation;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
// Obtain the SupportMapFragment and get notified when the map is ready to be used.
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
private void checkPermission() {
// check permission
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION},
locationRequestCode);
} else {
mFusedLocationClient.getLastLocation().addOnSuccessListener(this, new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
if (location != null) {
wayLatitude = location.getLatitude();
wayLongitude = location.getLongitude();
}
}
});
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case 1000: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
mFusedLocationClient.getLastLocation().addOnSuccessListener(this, new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
if (location != null) {
wayLatitude = location.getLatitude();
wayLongitude = location.getLongitude();
}
}
});
} else {
Toast.makeText(this, "Permission denied", Toast.LENGTH_SHORT).show();
}
break;
}
}
}
/**
* Manipulates the map once available.
* This callback is triggered when the map is ready to be used.
* This is where we can add markers or lines, add listeners or move the camera. In this case,
* we just add a marker near Sydney, Australia.
* If Google Play services is not installed on the device, the user will be prompted to install
* it inside the SupportMapFragment. This method will only be triggered once the user has
* installed Google Play services and returned to the app.
*/
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
mMap.setMyLocationEnabled(true);
mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
checkPermission();
locationRequest = LocationRequest.create();
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
locationRequest.setInterval(5000);
locationCallback = new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
if (locationResult == null) {
return;
}
for (Location location : locationResult.getLocations()) {
if(previousLocation != null) {
float distance = location.distanceTo(previousLocation);
Log.i(TAG, "onLocationResult: distance: " + distance );
}
previousLocation = location;
if (location != null) {
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(
new LatLng(location.getLatitude(), location.getLongitude()), 15
));
break;
}
}
}
};
mFusedLocationClient.requestLocationUpdates(locationRequest, locationCallback , Looper.myLooper());
}
}
Любые мысли будут высоко оценены, так как я застрял на Уже 2 недели.