Перемещение маркера в местоположение пользователя в Android studio - PullRequest
0 голосов
/ 15 ноября 2018

Я пытался создать приложение для работы с картой, которое при запуске отображает местоположение пользователя на карте GPS с помощью маркера.Тем не менее, при запуске, он просто отображает маркер в местоположении по умолчанию (Сидней), пожалуйста, помогите.Ниже приведен мой код. Я пробовал несколько способов, но все они все еще приводят меня в Сидней.Я пытаюсь сделать так, чтобы приложение сразу после запуска доставляло меня прямо в мое местоположение.Ниже мой код;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_real_time_location);
    // 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);
    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, PackageManager.PERMISSION_GRANTED);
    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, PackageManager.PERMISSION_GRANTED);
}



public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;

    LatLng sydney = new LatLng(-34, 151);
    mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
    mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));

    locationListener = new LocationListener() {
        @Override
        public void onLocationChanged(Location location) {

            try {
                latLng = new LatLng(location.getLatitude(), location.getLongitude());

                mMap.addMarker(new MarkerOptions().position(latLng).title("My Current Position"));
                mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
            }
            catch (SecurityException e){
                e.printStackTrace();
            }
        }

        @Override
        public void onStatusChanged(String s, int i, Bundle bundle) {

        }

        @Override
        public void onProviderEnabled(String s) {

        }

        @Override
        public void onProviderDisabled(String s) {

        }
    };

    locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

    try {
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_UPDATE_TIME, MIN_UPDATES_DISTANCE, locationListener);
    }
    catch (SecurityException e){
        e.printStackTrace();
    }
}

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

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

0 голосов
/ 15 ноября 2018

Вместо этого используйте LocationCallback для получения вашего последнего местоположения:

LocationCallback mLocationCallback = new LocationCallback() {
    @Override
    public void onLocationResult(LocationResult locationResult) {
        List<Location> locationList = locationResult.getLocations();
        if (locationList.size() > 0) {
            //The last location in the list is the newest
            Location location = locationList.get(locationList.size() - 1);
            Log.i(TAG, "Location " + location.getLatitude() + " " + location.getLongitude());

            mLastLocation = location;
            if (mCurrLocationMarker != null) {
                mCurrLocationMarker.remove();
            }

            //Create instance for current user lat and lng
            LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());

            // Add user position marker
            currentUserPositionMarker(latLng);

            //move map camera
            gMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, CURRENT_MAP_ZOOM));

        }
    }
};

/**
 * Add Marker for user current position
 *
 * @param latLng current lat and lng of user
 */
private void currentUserPositionMarker(LatLng latLng) {
    MarkerOptions markerOptions = new MarkerOptions();
    markerOptions.position(latLng);
    markerOptions.title(CURRENT_POSITION);
    mCurrLocationMarker = gMap.addMarker(markerOptions);

     //move map camera
     gMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, CURRENT_MAP_ZOOM));
}


@Override
public void onPause() {
    super.onPause();

    if (mFusedLocationProviderClient != null) {
        mFusedLocationProviderClient.removeLocationUpdates(mLocationCallback);
    }
}

@SuppressLint("MissingPermission")
@Override
public void onMapReady(GoogleMap googleMap) {
    gMap = googleMap;
    gMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
    gMap.getUiSettings().setMapToolbarEnabled(false);

    mLocationRequest = new LocationRequest();
    mLocationRequest.setInterval(SET_INTERVAL_FOR_ACTIVE_LOCATION_UPDATES); // 3 seconds interval
    mLocationRequest.setFastestInterval(SET_INTERVAL_FOR_ACTIVE_LOCATION_UPDATES);
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

    if (isFineLocationPermissionGranted())
        mFusedLocationProviderClient.requestLocationUpdates(mLocationRequest, mLocationCallback, Looper.myLooper());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...