android – 谷歌地图每秒更新当前位置

您好stackoferflow用户.

我正在开发Android应用程序,这个应用程序实现了Google Play服务

我已经获得了我的位置,并在地图上设置了一个引脚和一个圆圈.

我想要实现的是每当我移动到某个地方时,圆圈也会移动并将我的位置作为中心位置.

我的问题是:

>如何每2-5秒更新一次当前位置,圆圈也将移动到我当前的新位置
>如何将我的圆圈区域设置为标记将放置的区域,因此如果标记不在我的圆圈区域中,它将不会显示在地图上.

谢谢

这是我用于地图的代码:

    mMap.setMyLocationEnabled(true);
    mMap.getUiSettings().setCompassEnabled(true);
    mMap.getUiSettings().setMyLocationButtonEnabled(true);
    mMap.getUiSettings().setRotateGesturesEnabled(true);

    locationManager = (LocationManager)getSystemService(LOCATION_SERVICE);
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this);
    // Creating a criteria object to retrieve provider
    Criteria criteria = new Criteria();

    // Getting the name of the best provider
    String provider = locationManager.getBestProvider(criteria, true);

    // Getting Current Location
    Location location = locationManager.getLastKnownLocation(provider);

    mMap.setInfoWindowAdapter(new InfoWindowAdapter() {

        @Override
        public View getInfoWindow(Marker arg0) {
            return null;
        }

        @Override
        public View getInfoContents(Marker marker) {
            View v = getLayoutInflater().inflate(R.layout.marker, null);
            TextView title= (TextView) v.findViewById(R.id.title);
            TextView info= (TextView) v.findViewById(R.id.info);
            title.setText(marker.getTitle().toString());
            info.setText(marker.getSnippet().toString());
            return v;
        }
    });

    if(location != null){
        double latitude = location.getLatitude();
        double longitude = location.getLongitude();
        myPosition = new LatLng(latitude, longitude);   

        CameraUpdate center = CameraUpdateFactory.newLatLngZoom(myPosition, 15);
        mMap.moveCamera(center);
        mMap.addMarker(new MarkerOptions()
            .position(myPosition)
            .alpha(0.8f)
            .anchor(0.0f, 1.0f)
            .icon(BitmapDescriptorFactory.fromResource(R.drawable.blue_pin))
            .title("Your position :\n ")
            .snippet(latitude + " and " + longitude));

        CircleOptions circleOptions = new CircleOptions()
          .center(myPosition)   //set center
          .radius(rad)   //set radius in meters
          .fillColor(0x402092fd)  //default
          .strokeColor(Color.LTGRAY)
          .strokeWidth(5);
          circle = mMap.addCircle(circleOptions);   

          CameraPosition cameraPosition = CameraPosition.builder()
                  .target(myPosition)
                  .zoom(15)
                  .bearing(90)
                  .build();

         mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition),2000, null);
    }

谢谢=)

最佳答案 您好每次更新您的位置必须使用broadcast.using这个您的服务开始,所以可以将你的地图代码放在线程中,你把延迟1秒,所以你得到位置每秒.你也把这个方法放在广播接收器类.

    public void onReceive(final Context context, Intent intent) {
        this.context = context;
        Log.i(TAG, "onReceive");

        locationManager = (LocationManager) context
                .getSystemService(Context.LOCATION_SERVICE);
        if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
            listener = new LocationListener() {

                @Override
                public void onLocationChanged(Location location) {
                    // double valueLatitude = location.getLatitude();
                    // double valueLongitude= location.getLongitude();
                    double precision = Math.pow(10, 6);
                    double valueLatitude = ((int) (precision * location
                            .getLatitude())) / precision;
                    double valueLongitude = ((int) (precision * location
                            .getLongitude())) / precision;
                    Log.i(TAG, "onLocationChanged");
                    Log.v(TAG, "LAT: " + valueLatitude + " & LONG: "
                            + valueLongitude);
                    String lat = String.valueOf(valueLatitude);
                    String lng = String.valueOf(valueLongitude);
                    SessionManager.saveLocation(valueLatitude, valueLongitude, context);
                    Log.v(TAG, "LAT: SESSION" + SessionManager.getlattitude(context));
                    try {
                        if (!SessionManager.getlattitude(context).equals(
                                valueLatitude)
                                || !SessionManager.getlongitude(context)
                                .equals(valueLongitude)) {

                            SessionManager.saveLocation(valueLatitude,
                                    valueLongitude, context);
//                            if (Utils.progrsDia.isShowing()) {
//                                Utils.progrsDia.dismiss();
//                            }
//                            CategoryNearbyFragment.callGetNearByFlyerListListner
//                                    .callGetNearByFlyer(lat, lng);
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }

                }

                @Override
                public void onProviderDisabled(String arg0) {
                }

                @Override
                public void onProviderEnabled(String arg0) {
                }

                @Override
                public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
                }

            };
            if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                // TODO: Consider calling
                //    ActivityCompat#requestPermissions
                // here to request the missing permissions, and then overriding
                //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
                //                                          int[] grantResults)
                // to handle the case where the user grants the permission. See the documentation
                // for ActivityCompat#requestPermissions for more details.
                return;
            }
            locationManager.requestSingleUpdate(
                    LocationManager.NETWORK_PROVIDER, listener, null);
        } else {
            // GlobalData.showSettingsAlert(context);
        }
    }
点赞