web-dev-qa-db-ja.com

onLocationChangedは自動的に呼び出されません

AndroidのonLocationChangedイベントに問題があります。トリガーは次のとおりです。

case R.id.start: {
    Points.add(overlay.getMyLocation()); // Points' type is ArrayList<GeoPoint>
    mgr.requestLocationUpdates(best, 0, 3, locationListener);
    }
    break;

そして、これがonLocationChangedメソッドです。

public void onLocationChanged(Location location) {
    i++;
    Points.add(overlay.getMyLocation());
    MapOverlay mapOverlay = new MapOverlay(Points.get(i-1), Points.get(i));
    map.getOverlays().add(mapOverlay); //does the drawing
    mMapController.animateTo(Points.get(i));
}

したがって、onLocationChangedは、「開始」を押した後に1回だけ呼び出されます。場所が変わるたびに自動的に呼び出されるはずですよね?私の場合、そうではありません。
私を助けてください。

11
user1080051

問題は解決したようです。 onCreateで、次を追加しました。

Criteria crit = new Criteria();
crit.setAccuracy(Criteria.ACCURACY_FINE);
best = mgr.getBestProvider(crit, false);
mgr.requestLocationUpdates(best, 0, 1, locationListener);

onLocationChangedは次のようになります。

@Override
public void onLocationChanged(Location location) {
    i++;
    nextPoint = overlay.getMyLocation();
    latitude = nextPoint.getLatitudeE6();
    longtitude = nextPoint.getLongitudeE6();
    lastPoint = new GeoPoint((int) latitude, (int) longtitude);
    Points.add(lastPoint);
    MapOverlay mapOverlay = new MapOverlay(Points.get(i - 1), Points.get(i));
    map.getOverlays().add(mapOverlay);
    mMapController.animateTo(Points.get(i));
    nextPoint = null;
    lastPoint = null;
}

また、非常に重要な方法:

@Override
protected void onResume() {
    super.onResume();
    mgr.requestLocationUpdates(best, 10000, 1, locationListener);
}

@Override
protected void onPause() {
    super.onPause();
    mgr.removeUpdates(locationListener);
}

また、いくつかの新しい権限:

<uses-permission Android:name="Android.permission.ACCESS_GPS" />
        <uses-permission Android:name="Android.permission.ACCESS_LOCATION" />
        <uses-permission Android:name="Android.permission.ACCESS_COARSE_LOCATION" />
        <uses-permission Android:name="Android.permission.ACCESS_FINE_LOCATION" />
        <uses-permission Android:name="Android.permission.INTERNET" />
8
user1080051