MapsForge / OSMARENDER / MapActivity funktioniert nicht

D

dave635061

Neues Mitglied
0
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? :(
 
Musst du die Activity von MapsForge nicht bei dir im Manifest mit angeben?

Ich denke schon.

Andersrum natürlich nicht.
 
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?

:(
 
So richtig kann ich Dir dazu gar nichts weiter sagen.

Aber schau doch mal in die AndNav sourcen. AndNav verwendet auch OSM.
 
OK... dann doch mit Google MAps... wie komm ich an diesen bescheidenen API-Key ran?
 
OK... gelöst.. benutze nun GoogleMaps... ;)

Genau über diese URL gelöst... danke für die Antwort...
 
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:
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. ;)
 

Ähnliche Themen

SaniMatthias
Antworten
19
Aufrufe
962
swa00
swa00
O
Antworten
15
Aufrufe
2.973
ORHUX
O
K
Antworten
3
Aufrufe
1.168
Kapikalaani
K
Zurück
Oben Unten