Tvorba mobilních aplikací pro geografická data III.
Mgr. Michal Jakl
LS 2025
Obsah lekce
Praktické cvičení: Tvorba a úpravy mobilní mapové aplikace
= Nástroje, které slouží ke sledování změn v kódu a usnadňují spolupráci mezi vývojáři.
Hlavní výhody:
Typy verzovacích systémů:
2. GIT
Klíčové vlastnosti:
Praktické příkazy:
Zajímavost:
2. GIT - pojmy I.
2. GIT - pojmy II.
2. GIT - pojmy III.
3. GIThub
Hlavní funkce:
Další funkce:
Zajímavost:
3. GIThub - tipy
4. Clone projektu z GIThubu
4. Clone projektu z GIThubu
5. Práce s kódem (Android)
Ukázová aplikace MyMapApp je ukázkovým řešením pro tvorbu mapové aplikace v Androidu pomocí knihovny MapLibre. Cílem je demonstrovat, jak:
5. Práce s kódem (Android) - struktura projektu
5. Práce s kódem (Android) - build.gradle
V tomto souboru definujeme konfiguraci aplikace, verzi SDK, název balíčku, a především závislosti a repozitáře.
Klíčové body:
5. Práce s kódem (Android) - AndroidManifest.xml
Manifest definuje základní konfiguraci aplikace, jako je název, povolení, aktivita a téma. V našem případě používáme téma definované v knihovně AppCompat.
5. Práce s kódem (Android) - activity_main.xml
V tomto souboru definujeme, co se zobrazí na obrazovce. Používáme zde jediný prvek – MapView z MapLibre, který bude zobrazovat mapu.
5. Práce s kódem (Android) - osm_style.json
Složka assets se nachází v adresáři app/src/main/. Do ní umístíme soubor osm_style.json, který definuje vlastní styl mapy s využitím dlaždic OpenStreetMap. Tento soubor zajistí, že se jako podkladová mapa použijí dlaždice z OpenStreetMap.
5. Práce s kódem (Android) - MarkerData.java
Pro ukládání dat o jednotlivých markerech (souřadnice a název) vytvoříme jednoduchou třídu. Tato třída se využije pro ukládání markerů do seznamu a následné přeměně na JSON pomocí knihovny Gson.
5. Práce s kódem (Android) - MainActivity.java I.
Hlavní logika aplikace se nachází v MainActivity.java. Zde jsou klíčové body:
5. Práce s kódem (Android) - MainActivity.java II.
6. Úprava a doplnění kódu (Android) - změna ikony
6. Úprava a doplnění kódu (Android) - změna ikony
6. Úprava a doplnění kódu (Android) - přejmenování aplikace
<string name="app_name">MyMapApp</string>
<string name="app_name">Moje Mapová Aplikace</string>
android:label="@string/app_name"
6. Úprava a doplnění kódu (Android) - změna zdroje mapových dlaždic
6. Úprava a doplnění kódu (Android) - změna zdroje mapových dlaždic
6. Úprava a doplnění kódu (Android) - změna zdroje mapových dlaždic
6. Úprava a doplnění kódu (Android) - aktivita pro seznam markerů
<Button
android:id="@+id/btnShowMarkers"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Zobrazit markery"
android:layout_margin="16dp"
android:layout_gravity="bottom|end" />
6. Úprava a doplnění kódu (Android) - aktivita pro seznam markerů
2. Vytvoření nové aktivity – MarkerListActivity (activity_marker_list.xml). V adresáři app/src/main/res/layout/ vytvořte soubor activity_marker_list.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
<ListView
android:id="@+id/listViewMarkers"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
6. Úprava a doplnění kódu (Android) - aktivita pro seznam markerů
3. Kód MarkerListActivity.java. Vytvořte nový soubor MarkerListActivity.java (v balíčku com.example.mymapapp):
package com.example.mymapapp;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import androidx.appcompat.app.AppCompatActivity;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.List;
public class MarkerListActivity extends AppCompatActivity {
private ListView listView;
private List<MarkerData> markerDataList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_marker_list);
listView = findViewById(R.id.listViewMarkers);
// Přečteme data z Intentu – předáme markerDataList jako JSON
String markerJson = getIntent().getStringExtra("marker_list");
if (markerJson != null) {
Gson gson = new Gson();
Type listType = new TypeToken<List<MarkerData>>(){}.getType();
markerDataList = gson.fromJson(markerJson, listType);
}
// Připravíme jednoduchý adaptér pro zobrazení markerů ve formátu "Název (lat, lng)"
if (markerDataList != null && !markerDataList.isEmpty()) {
String[] markerStrings = new String[markerDataList.size()];
for (int i = 0; i < markerDataList.size(); i++) {
MarkerData data = markerDataList.get(i);
markerStrings[i] = data.title + " (" + data.latitude + ", " + data.longitude + ")";
}
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, markerStrings);
listView.setAdapter(adapter);
}
}
}
6. Úprava a doplnění kódu (Android) - aktivita pro seznam markerů
4. Úprava MainActivity.java. Do stávající MainActivity přidejte obsluhu tlačítka, které otevře MarkerListActivity.
// Na začátku onCreate() v MainActivity:
Button btnShowMarkers = findViewById(R.id.btnShowMarkers);
btnShowMarkers.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Pomocí Gson převedeme markerDataList do JSON řetězce a předáme ho pomocí Intentu
Gson gson = new Gson();
String markerJson = gson.toJson(markerDataList);
Intent intent = new Intent(MainActivity.this, MarkerListActivity.class);
intent.putExtra("marker_list", markerJson);
startActivity(intent);
}
});
6. Úprava a doplnění kódu (Android) - aktivita pro seznam markerů
5. Registrace MarkerListActivity v AndroidManifest.xml. Do souboru AndroidManifest.xml přidejte novou aktivitu:
<application
... >
<activity android:name=".MainActivity" ... />
<activity android:name=".MarkerListActivity" />
</application>
6. Úprava a doplnění kódu (Android) - samostatná práce
Upravte seznam markerů tak, aby vypadal co nejpodobněji uvedenému vzoru
7. Export aplikace (Android) - debug vs. release
Debug Build:
Podepsaný APK:
App Bundle:
7. Export aplikace (Android) - APK vs. App Bundle
APK (Android Package):
Android App Bundle (AAB):
7. Export aplikace (Android) - postup
Debug Build:
Podepsaný APK:
Export App Bundle:
Děkuji za pozornost a těším se příště!��Prostor pro zpětnou vazbu
mail@mjakl.cz
Tel. 608 544 839
Web: mjakl.cz
Telegram: t.me/mjakl_cz