0

MyLocationOverlay を機能させることができません。検索して多くのコードを試しましたが、機能するコードは 1 つもありませんでした。黒い画面しか表示されません。ユーザーの位置を追跡するために必要です。通常のオーバーレイでユーザーの位置を追跡できましたが、新しい位置ごとにマップが再度ダウンロードされることに気付きました (これは非常に面倒で実用的ではありません)。

通常のオーバーレイを使用するためのコード:

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

MyLocationOverlayAndroid 2.2 を実行しているエミュレーターで、インスタンス化された初期の時点で黒い画面が表示されます。同じ仕様のエミュレートされたデバイスで同じプロジェクトを実行しようとしましたが、Android 4.2 が実行されていて、うまくいきました。

なぜこれが起こっているのかを説明することはできません。私の場合、従来のアプローチと典型的なアプローチを使用することを選択しましたItemizedIconOverlay

于 2012-12-17T02:04:02.497 に答える