2015-06-28 8 views
1

我是谷歌地图apis为我当前的位置。我正在开发地图应用程序,它首先载入当前位置,然后用户可以指向地图上的任何位置。我的问题是,如果我正在移动,那么我的位置会一次又一次地移向我目前的位置,并且用户无法在地图上指向所需的位置,因为它再次路由到其当前位置。我的代码如下,其中我使用代码来初始化地图。您的帮助将不胜感激。如何在首次加载后禁用谷歌地图当前位置跟踪android

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; 
      } 

     } 
    }; 
+0

你有没有初始化lastLocation? –

+0

感谢@AditiParikh的回复。是的,我正在初始化我的lastLocation。请检查我的方法的结束,在这里我用我当前的坐标初始化它。 –

+0

是的..当你的条件满足时它会被调用。 尝试调试代码...检查您的条件是否满足。 –

回答

1

@using_coding可能有很多方法可以做到这一点,我没有检查这个代码,但可能它会帮助你在你的场景。

1:进行布尔在创建您的活动类似的检查:

boolean isFirstTime = true; 

在你的位置监听器首次化妆:

mMap.setMyLocationEnabled(true); 

而在此列使您isFirstTime到是假的,并在该区块使MyLocationEnabled为假。通过这种方式,如果用户位置发生了变化,那么它将检查布尔值,如果它是假的,那么它将不会更新您的当前位置。

2:第二种方式不是解决方案,但你也可以这样做,就像你可以设置location request时间相对更多一样。

相关问题