最近想搞一下Osmdroid,发现官方demo中显示地图的基本功能都无法实现。按照官网demo,地图上都是灰色格子。而下载了OpenStreetMapViewer源码,在AS中竟然可以显示地图,并且Manifest.xml中对于permission的配置也是一样的。原因(官网上其实也讲了):对于6.0以上的需要进行WRITE_EXTERNAL_STORAGED permission的许可。于是乎测试了一下4.3,api18,同样的代码果然可以显示地图。转回来看了下OpenStreetMapViewer源码,发现其竟然又检查了一边WRITE_EXTERNAL_STORAGED 。于是乎,copy一下checkpermission()函数,加入onCreate函数,代码如下:
final private int REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS=124;
private void checkPermissions(){
Stringmessage="osmdroid permissions:";
Stringstorage="no Storage access to store maptiles.";
if(Build.VERSION.SDK_INT>=23){//api 22应该也是同样的问题
List<String>permissions=newArrayList<>();
if(ContextCompat.checkSelfPermission(this,Manifest.permission.WRITE_EXTERNAL_STORAGE)!=PackageManager.PERMISSION_GRANTED){
Log.d(message,storage);
permissions.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
String[]params=permissions.toArray(newString[permissions.size()]);
requestPermissions(params,REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);
}//else:Wealreadyhavepermissions,sohandleasnormal
Log.d(message,storage);
}
}
果然,久违的地图出现了。解决这个问题过程中发现,国内的资料实在是少,对于我等小白真是困难重重。