从sdcard重新映射到android中的资源

时间:2017-03-17 19:43:25

标签: android mapsforge

我正在尝试从资产文件夹中的现有文件加载,而不是SD卡,因为我的代码如下:

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

我不确定如何在Android中执行此操作并正在寻求帮助。

1 个答案:

答案 0 :(得分:0)

如果我没记错,您无法访问assets文件夹中的.map文件。你必须从那里复制到SD卡。

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()");
            }
        }
    }
}

然后我像这样加载MapDataStore:

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

根据this,您应该将其放入清单文件中:

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

它将使您免于明确要求用户授予WRITE_EXTERNAL_STORAGE权限。