首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >osmdroid地图只查看网格,可以在没有外部存储权限的情况下使用osmdroid?

osmdroid地图只查看网格,可以在没有外部存储权限的情况下使用osmdroid?
EN

Stack Overflow用户
提问于 2019-10-30 11:26:48
回答 1查看 339关注 0票数 0

我的osmdroid地图只显示一个空的网格,为什么会这样?

我在这里搜索了一些同样的问题,并尝试过,但我无法解决我的问题。我读过osmdroid需要对sdcard /外部存储的许可。我不能用这个吗?因为我的设备不支持外部存储或sdcard。

这是我的代码

代码语言:javascript
运行
复制
        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();
    }

这是我的清单

代码语言:javascript
运行
复制
   -->
    <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"/>

我该如何解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2019-10-30 23:36:32

因此,您没有提到您正在使用的osmdroid或android的哪个版本,但是没有对配置设置做任何改动,它将默认为应用程序私有存储,应该按原样工作。它应该默认为/data/data/yourAppPackageName/osmdroid/

如果默认值不起作用(重置配置实例之后),那么尝试设置上面描述的显式路径。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58624366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档