requestLocationUpdates不会自动发生

时间:2015-07-26 07:58:53

标签: java android google-maps-android-api-2

我目前正在创建一个Android地图应用程序,我想让用户能够跟踪自己的路线。因此,基本上他们将按下一个开始按钮,然后将检测他们的当前位置,并且当他们开始行走时,将动态绘制折线。

目前我尚未绘制折线,但我可以使用模拟位置继续检测更新的当前位置。但是要获得更新,我必须一直按下开始按钮。有没有办法让标记自己出现,而我不必手动按下开始按钮?

这是我的代码

btn点击

开始
 btnStart = (Button) findViewById(R.id.btnStart);
    btnStart.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            // getting current location
            MyLocationListener myLocListener = new MyLocationListener();

            LocationManager locManager;
            String context = Context.LOCATION_SERVICE;
            locManager = (LocationManager) getSystemService(context);

            Criteria c = new Criteria();
            c.setAccuracy(Criteria.ACCURACY_FINE);
            c.setAltitudeRequired(false);
            c.setBearingRequired(false);
            c.setCostAllowed(true);
            c.setPowerRequirement(Criteria.POWER_LOW);

            String provider = locManager.getBestProvider(c, true);
            Location loc = locManager.getLastKnownLocation(provider);

            locManager.requestLocationUpdates(provider, 50, 10, myLocListener);

            LatLng currentPosition = updateWithNewLocation(loc);
            // getting current location - end


            // setting a marker at the curretnt location (start of polyline)
            Marker startLocation = mMap.addMarker(new MarkerOptions()
                    .position(currentPosition)
                    .title("Start Location")
                    .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)));

            mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(currentPosition, 17));

        }
    });

updateWithNewLocation方法

  private LatLng updateWithNewLocation(Location loc) {
    String latLonString;
    LatLng currentLocation = null;
    if (loc != null) {
        double lat = loc.getLatitude();
        double lon = loc.getLongitude();

        currentLocation = new LatLng(lat, lon);

    } else {
        latLonString = "No location found";
    }

    return currentLocation;
}

最后但并非最不重要的是,我的 LocationListener

 private final LocationListener locListener = new LocationListener() {
    @Override
    public void onLocationChanged(Location location) {
        updateWithNewLocation(location);
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {

    }

    @Override
    public void onProviderEnabled(String provider) {

    }

    @Override
    public void onProviderDisabled(String provider) {

    }
};

1 个答案:

答案 0 :(得分:0)

你能在下面试试吗?

locManager.requestLocationUpdates(provider, 50, 10, myLocListener);

locManager.requestLocationUpdates(provider, 0, 0, myLocListener);

因为位置管理器要求 50米更新位置本身。

有关Location Manager的更多详情。

希望它会对你有所帮助。