0

我无法让 MyLocationOverlay 工作,我搜索它并尝试了许多代码,但没有一个有效的代码。我只会黑屏。我需要它来跟踪用户位置。我设法通过常规覆盖来跟踪用户位置,但我注意到对于每个新位置,地图都会再次下载(这非常麻烦且不实用)。

使用常规叠加的代码:

import java.util.ArrayList;
import org.osmdroid.DefaultResourceProxyImpl;
import org.osmdroid.ResourceProxy;
import org.osmdroid.tileprovider.tilesource.TileSourceFactory;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.MapController;
import org.osmdroid.views.MapView;
import org.osmdroid.views.overlay.ItemizedIconOverlay;
import org.osmdroid.views.overlay.ItemizedOverlay;
import org.osmdroid.views.overlay.OverlayItem;
import org.osmdroid.views.util.constants.MapViewConstants;

import android.app.Activity;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.Menu;
import android.widget.Toast;

public class OnlineTracking extends Activity implements LocationListener, MapViewConstants 
{
    private MapView mMapView; 
    private MapController mapController; 
    private LocationManager mLocMgr; 
    private ItemizedOverlay<OverlayItem> mMyLocationOverlay; 
    private ResourceProxy mResourceProxy; 

ArrayList<OverlayItem> items;

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    mResourceProxy = new DefaultResourceProxyImpl(getApplicationContext()); 
    setContentView(R.layout.main); 
    initilaizeMap();
    mLocMgr = (LocationManager) getSystemService(LOCATION_SERVICE); 
    mLocMgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 3, this);      
} 

public void initilaizeMap()
{
    mMapView = (MapView) this.findViewById(R.id.mapView); 
    mMapView.setTileSource(TileSourceFactory.MAPNIK); 
    //mMapView.setUseDataConnection(false);
    mMapView.setBuiltInZoomControls(true); 
    mMapView.setMultiTouchControls(true); 
    mapController = this.mMapView.getController(); 
    mapController.setZoom(15); 
    mapController.setCenter(new GeoPoint(15.610762,32.540345));  
}

public void displayLocation(GeoPoint loc)
{
    //mapController.setCenter(loc);
    items = new ArrayList<OverlayItem>(); 
    // Put overlay icon a little way from map center
    items.add(new OverlayItem("Here you are", "we will keep track of you", loc));
    /* OnTapListener for the Markers, shows a simple Toast. */ 
    this.mMyLocationOverlay = new ItemizedIconOverlay<OverlayItem>(items, 
            new ItemizedIconOverlay.OnItemGestureListener<OverlayItem>() { 
                @Override 
                public boolean onItemSingleTapUp(final int index, 
                        final OverlayItem item) { 
                    Toast.makeText( 
                            OnlineTracking.this, 
                            "single tap" + item.mTitle, Toast.LENGTH_LONG).show(); 
                    return true; // We 'handled' this event. 
                } 
                @Override 
                public boolean onItemLongPress(final int index, 
                        final OverlayItem item) { 
                    Toast.makeText( 
                            OnlineTracking.this,  
                            "longPress '" + item.mTitle ,Toast.LENGTH_LONG).show(); 
                    return false; 
                } 
            }, mResourceProxy); 
    mMapView.getOverlays().clear();
    this.mMapView.getOverlays().add(this.mMyLocationOverlay); 
    //mMapView.invalidate();
}

public void onLocationChanged(Location location)
{ 
    int lat = (int) (location.getLatitude() * 1E6); 
    int lng = (int) (location.getLongitude() * 1E6); 
    GeoPoint gpt = new GeoPoint(lat, lng); 
    displayLocation(gpt);
} 

@Override 
public void onProviderDisabled(String arg0) {} 

@Override 
public void onProviderEnabled(String provider) {} 

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

1 回答 1

0

似乎这不是开发人员错误。我尝试运行以下使用 osmdroid 的示例项目:

http://android-er.blogspot.it/2012/06/add-mylocationoverlay-on-openstreetmap.html

MyLocationOverlay在运行 Android 2.2 的模拟器上,我在实例化的早期出现黑屏。我尝试在具有相同规格但运行 Android 4.2 的模拟设备下运行相同的项目,并且它有效。

我真的无法解释为什么会发生这种情况,就我而言,我选择使用传统方法和典型ItemizedIconOverlay

于 2012-12-17T02:04:02.497 回答