Android osmdroid Karte in App inbinden

Diskutiere osmdroid Karte in App inbinden im Mobile Geräte Forum; Hallo, vielleicht kann mir hier jemand bei meinem Problem helfen. Ich möchte eine App unter Verwendung von Open Streat Maps programmieren. Im...

  1. reqlo
    reqlo Neues Mitglied
    Hallo,
    vielleicht kann mir hier jemand bei meinem Problem helfen. Ich möchte eine App unter Verwendung von Open Streat Maps programmieren. Im Moment scheitert es schon daran, dass mir die Karte nicht angezeigt wird sondern nur ein graues Gittermuster.
    Ich habe folgenden Code in Android Studio:

    Code (Text):
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.ViewGroup;

    import org.osmdroid.DefaultResourceProxyImpl;
    import org.osmdroid.util.GeoPoint;
    import org.osmdroid.views.MapView;
    import org.osmdroid.views.overlay.MyLocationOverlay;
    import org.osmdroid.views.overlay.mylocation.MyLocationNewOverlay;

    public class Main extends AppCompatActivity {

        private MapView mapView;
        private MyLocationOverlay myLocationOverlay;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            mapView = new MapView(this,256, new DefaultResourceProxyImpl(this));
            mapView.setBuiltInZoomControls(true);
            mapView.setMultiTouchControls(true);
            mapView.getController().setZoom(16);
            mapView.getController().setCenter(new GeoPoint(52.221, 6.893));

            ViewGroup container = (ViewGroup)findViewById(R.id.container);
            container.addView(mapView);

            myLocationOverlay = new MyLocationOverlay(getApplicationContext(),mapView);
            myLocationOverlay.enableMyLocation();
            mapView.getOverlays().add(myLocationOverlay);
        }
    }
    Mein Manifest:
    Code (Text):

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.lothar.karte">




        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
            <activity android:name=".Main">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />

                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>

        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    </manifest>
     
    und mein build:
    Code (Text):

    apply plugin: 'com.android.application'

    android {
        compileSdkVersion 23
        buildToolsVersion "23.0.2"

        defaultConfig {
            applicationId "com.example.lothar.karte"
            minSdkVersion 15
            targetSdkVersion 23
            versionCode 1
            versionName "1.0"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }

    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        testCompile 'junit:junit:4.12'
        compile 'com.android.support:appcompat-v7:23.1.1'
        compile files('libs/slf4j-android-1.5.8.jar')
        compile files('libs/osmdroid-android-4.2.jar')
    }
     
    Die .jar-dateien aus den dependencies stehen im libs-Ordner

    mfg
    reqlo
     
  2. Vielleicht hilft dir dieser Kurs hier weiter --> (hier klicken)
  3. looparda
    looparda Mitglied
    Versuch mal diese Anleitung mit aktueller Version (oder musst du diese spezielle Version benutzen?). Du musst die Library nicht manuell nach libs laden. Das macht gradle für dich, wenn du es wie in HowToGradle angibst (Version ersetzen, aktuell wohl 5.5).
    https://github.com/osmdroid/osmdroid/wiki/How-to-use-the-osmdroid-library
    Falls es nicht funktioniert zeig nochmal deine activity_main.xml oder versuche statt der Karte erstmal Text in den View zu laden um sicherzustellen, dass der Austausch des container contents prinzipiell funktioniert.
     
  4. reqlo
    reqlo Neues Mitglied
    Danke für die schnelle Antwort.
    Die main.xml ist ein einfaches FrameLayout:
    Code (Text):

    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="com.example.lothar.karte.Main">
    </FrameLayout>
     
    Das "HowToGradle" habe ich auch schon gesehen. Ich wusste nur nicht, wie man die Version reinschreibt. Ich habe jetzt folgendes versucht:
    Code (Text):

    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        testCompile 'junit:junit:4.12'
        compile 'com.android.support:appcompat-v7:23.1.1'
        //compile files('libs/slf4j-android-1.5.8.jar')
        //compile files('libs/osmdroid-android-4.0.jar')
        compile 'org.osmdroid:osmdroid-android:(4.0):release@aar'
    }
     
    Ich brauche keine bestimmte Version, ich habe es auch mit 5.5, 5.1 probiert. Ich bekomme folgende Fehlermeldung:
    Code (Text):

    Error:A problem occurred configuring project ':app'.
    > Could not resolve all dependencies for configuration ':app:_debugCompile'.
      > Could not find org.osmdroid:osmdroid-android:(4.0).
      Searched in the following locations:
      https://jcenter.bintray.com/org/osmdroid/osmdroid-android/(4.0)/osmdroid-android-(4.0).pom
      https://jcenter.bintray.com/org/osmdroid/osmdroid-android/(4.0)/osmdroid-android-(4.0)-release.aar
      file:/C:/Users/Lothar/AppData/Local/Android/sdk1/extras/android/m2repository/org/osmdroid/osmdroid-android/(4.0)/osmdroid-android-(4.0).pom
      file:/C:/Users/Lothar/AppData/Local/Android/sdk1/extras/android/m2repository/org/osmdroid/osmdroid-android/(4.0)/osmdroid-android-(4.0)-release.aar
      file:/C:/Users/Lothar/AppData/Local/Android/sdk1/extras/google/m2repository/org/osmdroid/osmdroid-android/(4.0)/osmdroid-android-(4.0).pom
      file:/C:/Users/Lothar/AppData/Local/Android/sdk1/extras/google/m2repository/org/osmdroid/osmdroid-android/(4.0)/osmdroid-android-(4.0)-release.aar
      Required by:
      Karte:app:unspecified
     
    Ich nehme an, die Version ist falsch eingetragen, denn Gradle sucht auf der richtigen Seite.

    mfg
    reqlo
     
  5. reqlo
    reqlo Neues Mitglied
    Ok, ich habe jetzt herausgefunden, wie man die Version eingibt:
    Code (Text):

    compile 'org.osmdroid:osmdroid-android:5.2@aar'
     
    also ohne Klammern.

    Nun bekomme ich folgende Fehlermeldung:
    Code (Text):

    Error:Execution failed for task ':app:transformClassesWithDexForDebug'.
    > com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.7.0_45\bin\java.exe'' finished with non-zero exit value 2
     
     
  6. looparda
    looparda Mitglied
  7. looparda
    looparda Mitglied
    Ich habe mir mal den ganzen Kram heruntergeladen und auf das nötigste runtergebrochen:
    Code (Java):
    public class Main extends AppCompatActivity {

        private MapView mapView;
        //private MyLocationOverlay myLocationOverlay;


        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            mapView = new MapView(this);
            mapView.setBuiltInZoomControls(true);
            mapView.setMultiTouchControls(true);
            mapView.getController().setZoom(16);
            mapView.getController().setCenter(new GeoPoint(52.221, 6.893));

            ViewGroup container = (ViewGroup)findViewById(R.id.container);
            container.addView(mapView);
        }
     
    Ich habe auch den Fehler bekommen aber konnte ihn durch
    Code (Text):

    multiDexEnabled true
     
    beheben. Was das jetzt macht weiß ich allerdingt nicht.
    Danach habe ich die App auf dem Handy ausgeführt. Ich habe auch ein graues Grid bekommen. Seit Android 5 muss man ja explizit die Berechtigung für Dienste erteilen. Also bin ich in die Berechtigungen der App gegangen und habe die Berechtigung für Speicher und Standort aktiviert. Und somit wurde die Karte angezeigt. Diese Rechte solltest du in deiner App einfach vom User anfragen. Wichtig scheint laut der Hilfeseite noch zu sein den user-agent zu setzen, damit du nicht vom osm service ausgesperrt wirst.
    Außerdem ist mir aufgefallen, dass du FrameLayout das zum einhängen von Fragmenten ist nicht wirklich benutzt.. außerdem müsstest du dann auch eine FragmentActivity benutzen, denke ich. FrameLayout ist zum einhängen eines einzigen Views wohl korrekt.
     
    Zuletzt bearbeitet: 1. Nov. 2016
  8. reqlo
    reqlo Neues Mitglied
    Danke looparda, mit deiner Hilfe habe ich es nach Überwindung einiger weiterer Hürden geschafft. :)
    Ich habe nun auch ein LineaLayout genommen, ich hatte mir vorher ehrlich gesagt keine Gedanken darüber gemacht.

    mfg
    reqlo
     
Die Seite wird geladen...

osmdroid Karte in App inbinden - Ähnliche Themen

osmdroid bunuspack HandDrawOverlay- mehr Linien
osmdroid bunuspack HandDrawOverlay- mehr Linien im Forum Mobile Geräte
osmdroid möchte nicht das es mapnik herunterlädt
osmdroid möchte nicht das es mapnik herunterlädt im Forum Mobile Geräte
Landkarten in Java (Geocaching)
Landkarten in Java (Geocaching) im Forum Allgemeine Java-Themen
Einfaches Kartenspiel (Spieler Klasse)
Einfaches Kartenspiel (Spieler Klasse) im Forum Java Basics - Anfänger-Themen
Einfärben von Gemeinden auf einer Karte
Einfärben von Gemeinden auf einer Karte im Forum Spiele- und Multimedia-Programmierung
Thema: osmdroid Karte in App inbinden