【发布时间】:2017-09-17 00:39:44
【问题描述】:
我的活动中只有一个空网格。我在清单中添加了写入外部存储权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
我的活动:
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_osm_map);
if(isStoragePermissionGranted()){
initMap();
}
}
private void initMap(){
MapView map = (MapView) findViewById(R.id.osm_map);
final float scale = getBaseContext().getResources().getDisplayMetrics().density;
final int newScale = (int) (256 * scale);
String[] OSMSource = new String[1];
OSMSource[0] = "https://gps.4u.uz/";
map.setTileSource(new OnlineTileSourceBase("USGS Topo", null, 1, 18, 256, "", OSMSource) {
@Override
public String getTileURLString(MapTile aTile) {
return getBaseUrl() + aTile.getZoomLevel() + "/" + aTile.getY() + "/" + aTile.getX()
+ mImageFilenameEnding;
}
});
map.setBuiltInZoomControls(true);
map.setMultiTouchControls(true);
MapController mapController = (MapController) map.getController();
mapController.setZoom(13);
GeoPoint geoPoint = new LatLonPoint(41.63, 64.59);
OverlayItem myLocationOverlayItem = new OverlayItem("Here", "Current Position", geoPoint);
Drawable myCurrentLocationMarker = this.getResources().getDrawable(R.drawable.ic_marker);
myLocationOverlayItem.setMarker(myCurrentLocationMarker);
final ArrayList<OverlayItem> items = new ArrayList<>();
items.add(myLocationOverlayItem);
CustomOverLay overlays = new CustomOverLay(myCurrentLocationMarker, map, this);
OverlayItem overlayItem = new OverlayItem("Title", "Snippet", geoPoint);
overlays.addOverlayItem(overlayItem);
map.getOverlays().add(overlays);
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int width = displayMetrics.widthPixels;
int height = displayMetrics.heightPixels;
map.setBottom(height);
map.setRight(width);
mapController.setCenter(geoPoint);
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(grantResults[0] == PackageManager.PERMISSION_GRANTED){
Log.d(TAG,"Permission: "+permissions[0]+ "was "+grantResults[0]);
initMap();
//resume tasks needing this permission
}else{
Log.d(TAG, "permission dined after requesting");
}
}
private static int REQUEST_CODE = 1;
public boolean isStoragePermissionGranted() {
if (Build.VERSION.SDK_INT >= 23) {
if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
return true;
} else {
Log.d(TAG, "Permission is revoked");
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE);
return false;
}
} else {
Log.d(TAG,"Permission is granted");
return true;
}
}
当我发现运行时的权限请求解决了问题时,我决定添加它。但它并没有解决问题。
有趣的是 osmdroid 文件位于内部存储,而不是外部。我只有 cache.db 和 cache.db-journal 文件。正如我所读到的,osmdroid 需要外部存储来存储缓存。我试过OpenStreetMapTileProviderConstants.setCachePath(this.getFilesDir().getAbsolutePath());。但是没有这样的方法。这就是我删除这条线的原因。而且我不能使用this pitch
我使用的是osmdroid 4.2版本
【问题讨论】: