Как сделать так, чтобы Android Google Map API пользовательского местоположения более обвинять - PullRequest
0 голосов
/ 04 мая 2020

В настоящее время я работаю над проектом 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 недели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...