1

在我的应用程序中,我使用地图视图来定位我的 gps 位置。

如果我在启动应用程序之前打开 gps 并等待 gps 修复,所有工作最终都会成功。如果我在启动应用程序后打开 gps,则会出现问题,因为在地图中该位置不会出现。

这是我在 MapActivity 上的代码:

private MapView mapView;
private List<Overlay> mapOverlays;
private MapController mapController;
private LocationManager locationManager;
private MyLocationOverlay myLocationOverlay;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_map_sensor);

    // Configure the Map
    mapView = (MapView) findViewById(R.id.mapview);

    mapView.setBuiltInZoomControls(true);
    mapView.setSatellite(false);
    mapController = mapView.getController();


    GeoPoint point = new GeoPoint(47.6945683 *1E6 ,11.5765886 *1E6);
    mapController.animateTo(point);

    mapController.setZoom(9); // Zoom 1 is world view

    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,
            50, new GeoUpdateHandler());
    myLocationOverlay = new MyLocationOverlay(this, mapView);
    mapView.getOverlays().add(myLocationOverlay);


    mapOverlays = mapView.getOverlays();
}

public class GeoUpdateHandler implements LocationListener {

    @Override
    public void onLocationChanged(Location location) {}

    @Override
    public void onProviderDisabled(String provider) {}

    @Override
    public void onProviderEnabled(String provider) {}

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

我错过了什么?

4

2 回答 2

0

我认为您需要locationListener在打开 GPS 后再次触发才能获取位置更新。

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,
        50, new GeoUpdateHandler());

希望它有帮助。

编辑:就我而言,触发位置更新代码在 onResume 方法中。因此,如果 GPS 未打开并且用户打开了它,当返回 Activity 时,它将再次自动触发。

于 2012-08-30T14:21:17.643 回答
0

我认为您只需要requestLocationUpdates()设置您拥有的功能。

GPS 最多需要 30 秒才能给出第一次定位。

我个人让我的Activity工具LocationListener运行良好(API 7+)。

尝试添加一个按钮来显示animateTo()您当前的位置,以检查 GPS 在您的应用程序中是否正常工作,即使之后启用它也是如此。

还尝试将与位置相关的代码从 移动onCreate()onResume().

于 2012-08-30T14:32:53.507 回答