1

私は現在の場所の Google マップ API です。最初に現在の位置をロードしてから、ユーザーがマップ上の任意の場所を指すことができるマップアプリケーションに取り組んでいます。私の問題は、私が移動している場合、私の場所が現在の場所に向かって何度も移動し、ユーザーが現在の場所に向かって再び移動するため、マップ上の目的の場所を指すことができないことです。私のコードを以下に示します。コードを使用してマップを初期化しています。あなたの助けに感謝します。

private static final LocationRequest REQUEST = LocationRequest.create()
            .setInterval(8000) // 5 seconds
            .setFastestInterval(16) // 16ms = 60fps
            .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

private void setUpMapIfNeeded() {
        if (mMap == null) {

            mMap = ((SupportMapFragment) getSupportFragmentManager()
                    .findFragmentById(R.id.map)).getMap();
            mMap.clear();
            mMap.setOnMapClickListener(MyLocationActivity.this);

            if (mMap != null) {
                mMap.setOnMapClickListener(MyLocationActivity.this);
                mMap.setMyLocationEnabled(true);
                mMap.setBuildingsEnabled(true);
                mMap.getUiSettings().setCompassEnabled(false);
                mMap.setIndoorEnabled(true);
                mMap.setMapType(mMap.MAP_TYPE_NORMAL);
                mMap.setTrafficEnabled(true);
            }
        }
    }

    private void setUpLocationClientIfNeeded() {
        if (mLocationClient == null) {
            mLocationClient = new LocationClient(getApplicationContext(),
                    connectionCallbacks, onConnectionFailedListener);
        }
    }

    ConnectionCallbacks connectionCallbacks = new ConnectionCallbacks() {

        @Override
        public void onDisconnected() {

        }

        @Override
        public void onConnected(Bundle connectionHint) {
            showLoadingDialog();
            mLocationClient.requestLocationUpdates(REQUEST, locationListener);
        }
    };

    OnConnectionFailedListener onConnectionFailedListener = new OnConnectionFailedListener() {

        @Override
        public void onConnectionFailed(ConnectionResult result) {

        }
    };

    OnMyLocationChangeListener onMyLocationChangeListener = new OnMyLocationChangeListener() {

        @Override
        public void onMyLocationChange(Location location) {

        }
    };

    LocationListener locationListener = new LocationListener() {

        @Override
        public void onLocationChanged(Location location) {

            dismissLoadingDialog();

            float diff = 0;

            if (lastLocation != null) {
                diff = location.distanceTo(lastLocation);
            }

            if ((lastLocation == null) || (diff > 5)) {

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

                CameraPosition cameraPosition = new CameraPosition(latLng, 14,
                        45, 0);

                CameraUpdate cameraUpdate = CameraUpdateFactory
                        .newCameraPosition(cameraPosition);

                mMap.animateCamera(cameraUpdate, 25, null);
            markerOptions.icon(BitmapDescriptorFactory.fromResource(R.drawable.flag));
                mMap.getUiSettings().setZoomControlsEnabled(true);
                mMap.getUiSettings().setZoomGesturesEnabled(true);
                lastLocation = location;
            }

        }
    };
4

1 に答える 1

2

@using_coding それを行うには多くの方法があるかもしれません。私はこのコードをチェックしませんでしたが、あなたのシナリオで役立つかもしれません。

1:次のようなアクティビティの作成でブール値のチェックを行います。

boolean isFirstTime = true;

あなたのロケーションリスナーで初めて作る:

mMap.setMyLocationEnabled(true);

そして、この列で isFirstTime を false にし、そのブロックMyLocationEnabledで false にします。このようにして、ユーザーの場所が変更された場合、ブール値がチェックされ、false の場合は現在の場所が更新されません。

location request2: 2 番目の方法は解決策ではありませんが、時間を比較的長く設定することもできます。

于 2015-06-28T08:59:28.663 に答える