osmdroid map only view grid, можно использовать osmdroid без разрешения внешнего хранилища? - PullRequest
0 голосов
/ 30 октября 2019

Моя osmdroid карта отображает только пустую сетку, почему это так? enter image description here

Я искал некоторые из тех же вопросов здесь и пробовал, но яне могу решить мою проблему. Я прочитал osmdroid необходимо разрешение для SDCard / внешнего хранилища. Могу ли я не использовать это? потому что мое устройство не поддерживает внешнее хранилище или SDCard.
Это мой код

        super.onCreate(savedInstanceState);
        Context context = getApplicationContext();
        Configuration.getInstance().load(context, PreferenceManager.getDefaultSharedPreferences(context));
        //Mapbox.getInstance(directmap.this, getString(R.string.access_token));

        IConfigurationProvider provider = Configuration.getInstance();
        File basePath = new File(getCacheDir().getAbsolutePath(), "osmdroid");
        //provider.setUserAgentValue(BuildConfig.APPLICATION_ID);
        provider.setOsmdroidBasePath(basePath);
        File tileCache = new File(provider.getOsmdroidBasePath().getAbsolutePath(), "tile");
        provider.setOsmdroidTileCache(tileCache);

        setContentView(R.layout.activity_directmap);
        ButterKnife.bind(this);

        final Context context1 = getApplicationContext();
        Configuration.getInstance().load(context1, PreferenceManager.getDefaultSharedPreferences(context1));
        Configuration.getInstance().setUserAgentValue(BuildConfig.APPLICATION_ID);
        mapView = findViewById(R.id.mapViewosm);
        mapView.setTileSource(TileSourceFactory.MAPNIK);
        mapView.setMultiTouchControls(true);
        mapView.setBuiltInZoomControls(true);


       // mapView = (MapView) findViewById (R.id.mapViewosm);
       // button = (Button) findViewById(R.id.startButton);

        roadManager = new GraphHopperRoadManager(getString(R.string.apikey), true);
        manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
        Objects.requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true);
        route.setOnClickListener(this);
        //mapView.onCre(savedInstanceState);
        //mapView.getMapAsync(this);

        startIcon = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_mark);
        //ambil lokasi pendonatur
        lat = -5.402213; //getIntent().getDoubleExtra("latitude", 0);,
        lng = 105.264113;//getIntent().getDoubleExtra("longitude", 0);

        setupOverlay();
        setupMap();
        addMarker();

    }
  protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Context context = getApplicationContext();
        Configuration.getInstance().load(context, PreferenceManager.getDefaultSharedPreferences(context));
        //Mapbox.getInstance(directmap.this, getString(R.string.access_token));

        IConfigurationProvider provider = Configuration.getInstance();
        File basePath = new File(getCacheDir().getAbsolutePath(), "osmdroid");
        //provider.setUserAgentValue(BuildConfig.APPLICATION_ID);
        provider.setOsmdroidBasePath(basePath);
        File tileCache = new File(provider.getOsmdroidBasePath().getAbsolutePath(), "tile");
        provider.setOsmdroidTileCache(tileCache);

        setContentView(R.layout.activity_directmap);
        ButterKnife.bind(this);

        final Context context1 = getApplicationContext();
        Configuration.getInstance().load(context1, PreferenceManager.getDefaultSharedPreferences(context1));
        Configuration.getInstance().setUserAgentValue(BuildConfig.APPLICATION_ID);
        mapView = findViewById(R.id.mapViewosm);
        mapView.setTileSource(TileSourceFactory.MAPNIK);
        mapView.setMultiTouchControls(true);
        mapView.setBuiltInZoomControls(true);


       // mapView = (MapView) findViewById (R.id.mapViewosm);
       // button = (Button) findViewById(R.id.startButton);

        roadManager = new GraphHopperRoadManager(getString(R.string.apikey), true);
        manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
        Objects.requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true);
        route.setOnClickListener(this);
        //mapView.onCre(savedInstanceState);
        //mapView.getMapAsync(this);

        startIcon = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_mark);
        //ambil lokasi pendonatur
        lat = -5.402213; //getIntent().getDoubleExtra("latitude", 0);,
        lng = 105.264113;//getIntent().getDoubleExtra("longitude", 0);

        setupOverlay();
        setupMap();
        addMarker();

    }
 private void setupMap() {
        // setting tile map
       // mapController = mapView.getController();
        BingMapTileSource.setBingKey(getString(R.string.bingkey));
        BingMapTileSource bingMap = new BingMapTileSource(null);
        bingMap.setStyle(BingMapTileSource.IMAGERYSET_ROAD);


        // menambah overlay ke dalam map
        mapView.getOverlays().add(rotationGestureOverlay);
        mapView.getOverlays().add(compassOverlay);
        mapView.getOverlays().add(myLocationNewOverlay);
        mapView.getOverlays().add(roadNodeMarkers);

        //setting mapView
        mapView.setTileSource(bingMap);
        mapView.setTilesScaledToDpi(true);
        mapView.setMinZoomLevel(1.0);
        mapView.setMaxZoomLevel(21.0);
        mapView.setMultiTouchControls(true);
        mapView.setUseDataConnection(true);
        mapView.getZoomController().setVisibility(CustomZoomButtonsController.Visibility.NEVER);

        mapController.animateTo(new GeoPoint(-5.402213, 105.264093));

    }

    private void addMarker() {
        Marker destMarker = new Marker(mapView);

        destPoint = new GeoPoint(lat, lng);
        destMarker.setPosition(destPoint);
        destMarker.setTitle(getIntent().getStringExtra("title"));
        destMarker.setSubDescription(getIntent().getStringExtra("username"));
        destMarker.setIcon(getDrawable(R.drawable.ic_mark));

        mapView.getOverlays().add(destMarker);
        mapView.invalidate();
    }

А это мой манифест

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

Как мне решить эту проблему?

1 Ответ

1 голос
/ 31 октября 2019

так что вы не упомянули, какую версию osmdroid или android вы используете, но без каких-либо проблем с настройками конфигурации, по умолчанию это будет личное хранилище приложения, и оно должно просто работать как есть. По умолчанию должно быть установлено значение /data/data/yourAppPackageName/osmdroid/

, если значение по умолчанию не работает (после сброса экземпляра конфигурации), затем попытайтесь установить явный путь, изображенный выше.

...