Huom. testattu 'minSdkVersion 28' määrityksellä.
Tutoriaali OpenStreetMap käyttöön omassa sovelluksessa. Huom. Kartan kaupallinen käyttö vaatii tutustumista käyttöehtoihin...
Aluksi vaadittu OSM-kirjasto build.gradle(:app)
tiedoston depencies osaan, Ja toinen jota käytetään kartta-aineiston lataukseen:
implementation 'org.osmdroid:osmdroid-android:6.1.10'
implementation 'androidx.preference:preference:1.2.0'
Kartta vaatii oikeudet AndroidManifest.xml
tiedostoon:
<uses-permission android:name="android.permission.INTERNET" />
Käyttöliittymä activity_main.xml
sisältää MapView -komponentin. Ei muuta.
<org.osmdroid.views.MapView
android:id="@+id/mapview"
tilesource="Mapnik"
android:layout_width="match_parent"
android:layout_height="match_parent" />
Seuraavaksi muutoksia MainActivity.java tiedostooon. Aluksi muutama luokkamuuttuja:
private static final String TAG="softa_kartta";
private MapView mMapView =null;
private MapController mMapController;
private final int REQUEST_PERMISSIONS_REQUEST_CODE = 101;
Ja sitten onCreate metodiin tarpeeliset osiot suunnilleen seuraavassa järjestyksessä:
- Kartta-aineiston lataus
- MapView määrittely
- Käyttöliittymään yhdistäminen
- oikeuksien kysely. Tässä esitetty tapa hyväksyy monta kyselyä samaan aikaan (requestPermissionsIfNecessary()-metodi kohta...)
- Karttapiste Hervoodiin
- Kartan keskitys pisteeseen
Context ctx = this.getApplicationContext();
Configuration.getInstance().load(ctx, PreferenceManager.getDefaultSharedPreferences(ctx));
mMapView = findViewById(R.id.mapview);
mMapView.setTileSource(TileSourceFactory.MAPNIK);
mMapController = (MapController) mMapView.getController();
mMapController.setZoom(18);
//kysellään oikeudet - ja tässä olisi mahdollista kysyä usemapi...
requestPermissionsIfNecessary(new String[]{
Manifest.permission.INTERNET
//, Manifest.permission.ACCESS_COARSE_LOCATION
});
//Paikka
GeoPoint gPt = new GeoPoint(61.44989, 23.85688);
mMapView.getController().setCenter(gPt);
Oikeuksien kyselyyn metodi joka hyväksyy monta(taulukkona):
private void requestPermissionsIfNecessary(String[] permissions) {
ArrayList<String> permissionsToRequest = new ArrayList<>();
for (String permission : permissions) {
if (ContextCompat.checkSelfPermission(this, permission)
!= PackageManager.PERMISSION_GRANTED) {
permissionsToRequest.add(permission);
}
}
if (permissionsToRequest.size() > 0) {
ActivityCompat.requestPermissions(
this,
permissionsToRequest.toArray(new String[0]),
REQUEST_PERMISSIONS_REQUEST_CODE);
}
}
Ja tulosten käsittely oikeuksien kyselystä
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
ArrayList<String> permissionsToRequest = new ArrayList<>();
for (int i = 0; i < grantResults.length; i++) {
permissionsToRequest.add(permissions[i]);
}
if (permissionsToRequest.size() > 0) {
ActivityCompat.requestPermissions(
this,
permissionsToRequest.toArray(new String[0]),
REQUEST_PERMISSIONS_REQUEST_CODE);
}
}
Ja jos ei käynnistyksessä tule karttakuvaa, niin kommenttia tänne mika.saari@tuni.fi