1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

MapsForge / OSMARENDER / MapActivity funktioniert nicht

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von dave635061, 29.06.2012.

  1. dave635061, 29.06.2012 #1
    dave635061

    dave635061 Threadstarter Neuer Benutzer

    Beiträge:
    11
    Erhaltene Danke:
    0
    Registriert seit:
    29.06.2012
    Moin moin... ich bin absoluter Anfänger in Android_programmierung.

    Ich bekommen hin einen View mit verschiedenen Elementen mit Eventlistenern usw. Also die Standardsachen sitzen (schon wegen JAvaGrundKentnissen)

    Nun mein Problem. Ich möchte gern eine Karte anzeigen. Keine von Google sondern OSM über MapsForge und OSMARENDER. Gesagt getan (auf den wichtigen Teil begrenzt):

    Aufrufende Klasse:

    .
    .
    .
    Button b = (Button) findViewById(R.id.button1);
    b.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
    startActivity(new Intent(this,showMap.class));
    }


    Ausführende Klasse:

    package de.originalXXXXXXX.com.yummy

    import org.mapsforge.android.maps.MapActivity;
    import org.mapsforge.android.maps.MapView;
    import org.mapsforge.android.maps.MapViewMode;
    import android.os.Bundle;

    public class showMap extends MapActivity {
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    MapView mapView = new MapView(this,
    MapViewMode.OSMARENDER_TILE_DOWNLOAD);
    mapView.setClickable(true);
    mapView.setBuiltInZoomControls(true);
    setContentView(mapView);
    }
    }

    So ich habe dazu noch in der Manifest folgendes festgelegt:
    <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"/>

    trotzdem erschein ein Fehler un ddie App stürzt ab. So als ob keine Verbindung zum Server besteht. Internet ist aber vorhanden.

    Fehlermeldung:
    06-29 15:21:00.470: E/AndroidRuntime(8958): android.content.ActivityNotFoundException: Unable to find explicit activity class {de.originalXXXXXXX.com.yummy/de.originalXXXXXXX.com.yummy.showMap}; have you declared this activity in your AndroidManifest.xml?

    Ich dachte ich muss die Activity bei mapsforge nicht mehr in der Manifest verankern?

    Wo ist mein Fehler? :(
     
  2. Unicate, 29.06.2012 #2
    Unicate

    Unicate Android-Experte

    Beiträge:
    473
    Erhaltene Danke:
    57
    Registriert seit:
    09.08.2010
    Musst du die Activity von MapsForge nicht bei dir im Manifest mit angeben?

    Ich denke schon.

    Andersrum natürlich nicht.
     
  3. dave635061, 29.06.2012 #3
    dave635061

    dave635061 Threadstarter Neuer Benutzer

    Beiträge:
    11
    Erhaltene Danke:
    0
    Registriert seit:
    29.06.2012
    OK, Danke... nun erscheint ein weißes Bild aber keine Map.. HAb ich richtig gelesen das der Dienst OSMARENDER abgeschaltet wurde? was gibts für Alternativen? Und wie greife ich auf diese zu?

    :(
     
  4. Unicate, 29.06.2012 #4
    Unicate

    Unicate Android-Experte

    Beiträge:
    473
    Erhaltene Danke:
    57
    Registriert seit:
    09.08.2010
    So richtig kann ich Dir dazu gar nichts weiter sagen.

    Aber schau doch mal in die AndNav sourcen. AndNav verwendet auch OSM.
     
  5. dave635061, 29.06.2012 #5
    dave635061

    dave635061 Threadstarter Neuer Benutzer

    Beiträge:
    11
    Erhaltene Danke:
    0
    Registriert seit:
    29.06.2012
    OK... dann doch mit Google MAps... wie komm ich an diesen bescheidenen API-Key ran?
     
  6. Unicate, 29.06.2012 #6
    Unicate

    Unicate Android-Experte

    Beiträge:
    473
    Erhaltene Danke:
    57
    Registriert seit:
    09.08.2010
  7. dave635061, 29.06.2012 #7
    dave635061

    dave635061 Threadstarter Neuer Benutzer

    Beiträge:
    11
    Erhaltene Danke:
    0
    Registriert seit:
    29.06.2012
    OK... gelöst.. benutze nun GoogleMaps... ;)

    Genau über diese URL gelöst... danke für die Antwort...
     
  8. dave635061, 01.07.2012 #8
    dave635061

    dave635061 Threadstarter Neuer Benutzer

    Beiträge:
    11
    Erhaltene Danke:
    0
    Registriert seit:
    29.06.2012
    So, gutgut ... ich lass die Karte anzeigen... Zoome auf den aktuellen Standort und lass mir da einen Pfeil anzeigen...

    Aber eins bekomm ich absolut nicht hin. Wie kann ich den Pfeil bei Änderung der Location mitwandern lassen?

    Ich hab folgendes versucht:

    public class MapsActivity extends MapActivity implements LocationListener
    {
    MapController mc;
    GeoPoint p;
    MapView mapView;
    List<Location> weg;
    Location ort;
    double lat;
    double lon;
    MapOverlay myPoint;
    List<Overlay> listOfOverlays;
    private LocationManager locationManager;

    class MapOverlay extends com.google.android.maps.Overlay
    {
    @Override
    public boolean draw(Canvas canvas, MapView mapView,

    boolean shadow, long when)
    {
    super.draw(canvas, mapView, shadow);

    //---translate the GeoPoint to screen pixels---
    Point screenPts = new Point();
    mapView.getProjection().toPixels(p, screenPts);

    //---add the marker---
    Bitmap bmp = BitmapFactory.decodeResource(
    getResources(), R.drawable.arrow_down_big);
    canvas.drawBitmap(bmp, screenPts.x-16, screenPts.y-32, null);
    return true;
    }
    }


    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mapView = (MapView) findViewById(R.id.mapView);
    LinearLayout zoomLayout = (LinearLayout)findViewById(R.id.zoom);
    View zoomView = mapView.getZoomControls();

    weg = getGeo.weg;

    ort = weg.get(0);

    lat = ort.getLatitude();
    lon = ort.getLongitude();

    zoomLayout.addView(zoomView,
    new LinearLayout.LayoutParams(
    LayoutParams.WRAP_CONTENT,
    LayoutParams.WRAP_CONTENT));
    mapView.displayZoomControls(true);
    mc = mapView.getController();
    p = new GeoPoint(
    (int) (lat * 1E6),
    (int) (lon * 1E6));
    mc.animateTo(p);
    mc.setZoom(17);

    //---Add a location marker---
    myPoint = new MapOverlay();
    listOfOverlays = mapView.getOverlays();
    listOfOverlays.clear();
    listOfOverlays.add(myPoint);


    locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this);

    mapView.invalidate();
    }
    @Override

    public void onLocationChanged(Location location)
    {
    weg.clear();
    weg.add(location);
    ort = weg.get(0);
    lat= ort.getLatitude();
    lon = ort.getLongitude();
    p = new GeoPoint(
    (int) (lat * 1E6),
    (int) (lon * 1E6));
    mc.animateTo(p);
    mc.setZoom(17);
    listOfOverlays.remove(myPoint);
    listOfOverlays.add(myPoint);
    mapView.invalidate();
    }


    @Override
    protected boolean isRouteDisplayed()
    {
    return false;
    }
    @Override
    public void onProviderDisabled(String provider) {
    // TODO Auto-generated method stub

    }
    @Override
    public void onProviderEnabled(String provider) {
    // TODO Auto-generated method stub

    }
    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
    // TODO Auto-generated method stub

    }
    }

    getGEO ist dabei ein Service der mir die aktuellen Punkte einträgt. Ich wollte erst die getGeo ergebnisse mit dem aktuellen Array vergleichen. Weiß allerdings nicht welchen Eventlistener ich da verwenden soll. Alles in allem funktioniert das mit dem Wechsel des Punktes nur, wenn ich mein Gerät drehe und somit der View gewechselt wird. Deshalb denke ich , ich muss nur den View aktualisieren. Aber wie bekomm ich das hin? Ich hoffe das war verständlich genug...

    Irgendwo hängst. Danke schonmal

    Der ursprüngliche Beitrag von 11:01 Uhr wurde um 12:21 Uhr ergänzt:

    Ok, Position wird doch geupdatet, aber sehr träge. Habe bereits locationManager.requestLocationUpdates(LocationMan ager.NETWORK_PROVIDER, 0, 0, this); zu locationManager.requestLocationUpdates(LocationMan ager.NETWORK_PROVIDER, 1000, 1, this);

    angepasst. Leider immer noch langsam. Zusätzlich habe ich die GPS-NAvigation mit hinzugefügt:
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000,1, this);

    trotzdem noch sehr langsames Aktualisieren... :(
     
    Zuletzt bearbeitet: 01.07.2012
  9. dave635061, 01.07.2012 #9
    dave635061

    dave635061 Threadstarter Neuer Benutzer

    Beiträge:
    11
    Erhaltene Danke:
    0
    Registriert seit:
    29.06.2012
    ok, noch ein update. Sobald GPS anliegt funktionierts wunderbar. Nur wenn über Netzbetreiber ein Abfrage geschieht dauert das so lang. Das scheint aber so normal zu sein. ;) Den Code habe ich übrigens noch einkürzen und optimieren können. ;)
     

Diese Seite empfehlen