Как открыть файл KML (из папки ресурсов) - PullRequest
0 голосов
/ 27 мая 2019

У меня есть файл KML в папке активов. Я хочу открыть его в Google Earth или Google Map. но ничего из этого не сработало. Вот что я попробовал:

Для Google Map

private GoogleMap map;
KmlLayer layer;
Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_locations);


    try {
        layer = new KmlLayer(map,getAssets().open("locations.kml"),context);
        layer.addLayerToMap();
    } catch (XmlPullParserException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

для Google Earth

    File KML = null;
    try {
        KML = new File(String.valueOf(getAssets().open("locations.kml")));
    } catch (IOException e) {
        e.printStackTrace();
    }
    Intent i = 
getPackageManager().getLaunchIntentForPackage("com.google.earth");
    i.setDataAndType(Uri.fromFile(KML), "xml");
    startActivity(i);

1 Ответ

0 голосов
/ 31 мая 2019
  1. Создайте новый проект с Google Map Activity.
  2. Теперь в методе onMapReady () используйте retrieveFileFromResource ()

    private void retrieveFileFromResource() {
            try {
                KmlLayer kmlLayer = new KmlLayer(mMap, R.raw.kml, getApplicationContext());
                kmlLayer.addLayerToMap();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (XmlPullParserException e) {
                e.printStackTrace();
            }
        }
    

    3. Полный код

    public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {
    
    private GoogleMap mMap;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);
        // Obtain the SupportMapFragment and get notified when the map is ready to be used.
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    
    
    }
    
    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
    
        retrieveFileFromResource();
    }
    
    private void retrieveFileFromResource() {
        try {
            KmlLayer kmlLayer = new KmlLayer(mMap, R.raw.kml, getApplicationContext());
            kmlLayer.addLayerToMap();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (XmlPullParserException e) {
            e.printStackTrace();
        }
    }
    }
    
...