2017-03-17 2 views
0

Ich versuche, aus einer bestehenden Datei aus den Asset-Ordnern zu laden, anstatt SD-Karte als mein Code unten tut:Nacharbeiten maploading von sdcard auf Vermögenswerte in android

MapDataStore mapDataStore = new MapFile(
    new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "berlin.map")); 

Ich bin nicht sicher, wie dies zu tun in Android und suche nach Hilfe.

+0

org.mapsforge.map.reader.MapFile stammt von mapsforge lib nicht von osmdroid-lib. Ich habe die Frage-Tags repariert. Ich habe nach [MapFile.java] (https://github.com/mapsforge/mapsforge/blob/master/mapsforge-map-reader/src/main/java/org/mapsforge/map/reader/MapFile.java) geschaut. und ich habe keine Stream-API gefunden, die für den Zugriff auf Assets erforderlich ist. Vielleicht kann dir jemand von Mapsforge helfen. Die osmdroid-mapsforge-Integration unterstützt derzeit keine Mapsforge-Maps in Assets. Wenn Sie herausfinden, wie es geht, fügen Sie es bitte zu diesem Ticket hinzu, damit wir es auch zu osmdroid-mapsforge-integration hinzufügen können – k3b

Antwort

0

Wenn ich mich richtig erinnere, können Sie nicht auf eine .map-Datei im Ordner Assets zugreifen. Sie müssen es von dort auf die SD-Karte kopieren.

private void provideMapData() { 
    String sourceFile = res.getString(R.array.mapsource); 
    String destinationFile = res.getString(R.array.mapdestination); 
    String pathPrefix = activity.getExternalFilesDir(null) + "/"; 

    File directory = new File(pathPrefix); 
    if (directory.exists() | directory.mkdirs()) { 
     AssetManager assetManager = activity.getAssets(); 
     InputStream inputStream; 
     OutputStream outputStream; 
     File file = new File(pathPrefix + destinationFile); 

     if (!file.exists()) { 
      try { 
       inputStream = assetManager.open(sourceFile); 
       outputStream = new FileOutputStream(file); 
       byte[] buffer = new byte[8192]; 
       int read; 
       while ((read = inputStream.read(buffer)) != -1) { 
        outputStream.write(buffer, 0, read); 
       } 
       inputStream.close(); 
       outputStream.flush(); 
       outputStream.close(); 
      } catch (IOException iOE) { 
       Log.e("Error: ", "provideMapData()"); 
      } 
     } 
    } 
} 

Dann lade ich die MapDataStore wie folgt aus:

MapDataStore mapDataStore = new MapFile(new File(activity.getExternalFilesDir(null) + "/" + destinationFile)); 

Nach this, sollten Sie diese in Ihre Manifest-Datei setzen:

<uses-permission 
    android:name="android.permission.WRITE_EXTERNAL_STORAGE" 
    android:maxSdkVersion="18" /> 

Es wird Sie retten ausdrücklich die fragen Benutzer, um die Berechtigung WRITE_EXTERNAL_STORAGE zu erteilen.

Verwandte Themen