2

私は Android 用の Skobbler Map API を使用していますが、これまでのところ非常に優れています。公式の「ハウツー」に従って、アプリにマップを実装することができました。アプリにマップをダウンロードさせてオフラインで使用するよりも。

しかし、私の目標は、事前にバンドルされたオフライン マップを用意することです。「ハウツー」のすべての手順を実行しましたが、うまくいきません。エラーが発生し続けます

10-31 06:54:50.347: D/SKMaps(15168): SKMapSurfaceView----Saved  map cache state  [ Map Region zoom=17.0 center= [13.385000228881836,52.51665115356445]]  [Display mode=MODE_2D]   [Follower mode=NONE]   [Compass shown=false Position = [0.0 ,0.0] ]  [Rotation=true ] [Panning=true][Zooming=true]   [Bearing=0.0] [Annotations=0]
10-31 06:54:50.357: E/BitmapFactory(15168): Unable to decode stream: java.io.FileNotFoundException: /storage/emulated/0/Android/data/com.example.myskobblermapbasic/files/SKMaps/res/xhdpi/icon_map_popup_navigate.png: open failed: ENOENT (No such file or directory)
10-31 06:54:50.367: E/BitmapFactory(15168): Unable to decode stream: java.io.FileNotFoundException: /storage/emulated/0/Android/data/com.example.myskobblermapbasic/files/SKMaps/res/xhdpi/icon_map_popup_arrow.png: open failed: ENOENT (No such file or directory)
10-31 06:54:50.377: D/SKMaps(15168): SKMapSurfaceView---- centerMapOnPosition [19.8171,41.3294]
10-31 06:54:50.377: D/SKMaps(15168): SKMapSurfaceView---- ON RESUME 
10-31 06:54:50.527: D/SKMaps(15168): MapRenderer----onSurfaceCreated
10-31 06:54:50.527: W/Settings(15168): Setting always_finish_activities has moved from android.provider.Settings.System to android.provider.Settings.Global, returning read-only value.
10-31 06:54:50.527: D/SKMaps(15168): MapRenderer---- LinInitialized = true 
10-31 06:54:50.527: D/SKMaps(15168): MapRenderer----SetInitSurfaceSetup 
10-31 06:54:50.527: E/Adreno-ES11(15168): <qglDrvAPI_glDeleteTextures:371>: GL_INVALID_VALUE
10-31 06:54:50.527: A/libc(15168): Fatal signal 11 (SIGSEGV) at 0x00000004 (code=1), thread 15226 (GLThread 664)

zip にオフライン マップを挿入するとすぐにエラーが発生するようです。

ここに私のMainActivityがあります:

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

        SKLogging.enableLogs(true);
        File externalDir = getExternalFilesDir(null);

        // determine path where map resources should be copied on the device
        if (externalDir != null) {
            mapResourcesDirPath = externalDir + "/SKMaps/";
        } else {
            mapResourcesDirPath = getFilesDir() + "/SKMaps/";
        }

        new SKPrepareMapTextureThread(this, mapResourcesDirPath, "SKMaps.zip", this).start();
    }

    @Override
    public void onMapTexturesPrepared(boolean prepared) {
        if(prepared){
            initializeLibrary();
            startActivity(new Intent(MainActivity.this, MapActivity.class));
        }else{
            Toast.makeText(MainActivity.this, "Map resources are not prepared", Toast.LENGTH_SHORT).show();
        }
    }

    /**
     * Initializes the SKMaps framework
     */
    private void initializeLibrary() {
        SKMapsInitSettings initMapSettings = new SKMapsInitSettings();
        // set path to map resources and initial map style
        initMapSettings.setMapResourcesPaths(mapResourcesDirPath,
                new SKMapViewStyle(mapResourcesDirPath + "/outdoorstyle/", "outdoorstyle.json"));

        // EXAMPLE OF ADDING PREINSTALLED MAPS
        initMapSettings.setPreinstalledMapsPath(mapResourcesDirPath + "/PreinstalledMaps");
        //initMapSettings.setConnectivityMode(SKMaps.CONNECTIVITY_MODE_OFFLINE);

        SKMaps.getInstance().initializeSKMaps(this, initMapSettings, API_KEY);
    }

そして私のMapActivity:

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

        SKMapViewHolder mapViewGroup = (SKMapViewHolder) findViewById(R.id.map_surface_holder);
        mapView = mapViewGroup.getMapSurfaceView();
        mapView.centerMapOnPosition(new SKCoordinate(19.8171, 41.3294));
    }

    @Override
    protected void onPause() {
        super.onPause();
        mapView.onPause();
    }

    @Override
    protected void onResume() {
        super.onResume();
        mapView.onResume();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        SKMaps.getInstance().destroySKMaps();
        android.os.Process.killProcess(android.os.Process.myPid());
    }

ありがとうございました、

4

2 に答える 2

2

次のファイルを含む SKMaps.zip を確認してください。

SKMaps/res/xhdpi/icon_map_popup_arrow.png
SKMaps/res/xhdpi/icon_map_popup_navigate.png

そうでない場合は、それらを追加する必要があります。

于 2014-10-31T07:51:38.967 に答える
1

でマップを初期化してみてください

new SKPrepareMapTextureThread(this, new File(yourMapPathHere).getParent(), "SKMaps.zip", this).start();
于 2014-11-10T18:18:00.487 に答える