使用ArcGIS api for android加载本地KML文件

使用ArcGIS api for android加载本地KML文件,android,kml,arcgis,Android,Kml,Arcgis,我正在使用ArcGIS api for android,我想加载一个本地KML文件 String url = Environment.getExternalStorageDirectory() + "\\Android\\data\\com.tehranuni.hazard.hazard\\us_states.kml"; SpatialReference sr = SpatialReference.create(102100); System.out.println("kmlu

我正在使用ArcGIS api for android,我想加载一个本地KML文件

String url = Environment.getExternalStorageDirectory() + "\\Android\\data\\com.tehranuni.hazard.hazard\\us_states.kml";

    SpatialReference sr = SpatialReference.create(102100);
    System.out.println("kmlurl: " + url);

    KMLLayer kmlLayer = new KMLLayer(url, sr); 
    mMapView.addLayer(kmlLayer);
这段代码给了我以下错误

KML layer fails to initializecom.esri.core.io.EsriServiceException: File not found. Wrong url or out of memory.
但是,当我使用同一KML的在线版本时,效果很好。我的意思是,当我将url更改为url时,效果非常好

我知道错误意味着kml不存在于该位置,但我已经复制了它 您能帮我找到一个好的解决方案吗?非常感谢您做出以下更改:

  • 使用而不是
    KMLLayer
    仅支持公共Internet上的KML URL,不推荐使用。它不适用于本地KML文件<代码>KML层支持本地KML文件和KML URL
  • 确保您已授予应用访问本地文件的权限:

  • 使用正斜杠,而不是反斜杠。除在窗口上外,反斜杠不用作路径分隔符

  • 使用
    File
    类构造文件路径,以防
    getExternalStorageDirectory()
    在某些设备的末尾包含斜杠
这是您的新代码:

File kmlFile = new File(
    Environment.getExternalStorageDirectory(),
    "Android/data/com.tehranuni.hazard.hazard/us_states.kml");
//Here you could check kmlFile.exists() to see if the app can actually see the file.
//If it's false, maybe you didn't grant permissions, or maybe the file path is wrong.

KmlLayer kmlLayer = new KmlLayer(kmlFile.getAbsolutePath()); 
mMapView.addLayer(kmlLayer);

太谢谢你了,我换成了Kmlayer,它很有效。太谢谢你了Hello,你能看看这个问题吗?