In dieser Session widmen wir uns einem typischen Workflow, den ein Entwickler einer Android App vermutlich irgendwann immer bevorsteht:

Das Android System benötigt zur Laufzeit eine Berechtigung für ein Feature und je nach dem was das Ergebnis aus der gefolgerten Aktion ist, muss die App reagieren.
Als Beispiel einer typischen Berechtigungsanfrage, widmen wir uns daher dem Erfahren der Benutzer-Lokation.

⚠️ Achtung:
Diese Session hier ist noch Work in Progress und noch nicht fertig. Du muss eventuell die Übungen ohne Hilfe selbst durchführen.

Wie wir bereits in der Navigation und Networking session gelernt haben, muss im Android Manifest angegeben werden, welche Permissions in einer App benötigt werden. Man kann dann im Play Store vor dem Herunterladen der Anwendung schon mal einsehen, welche Berechtigungen die App wohlmöglioch gerne hätte und für Geräte mit < Android 5 ist das auch gleich eine Akzeptanz für alle angegebenen Berechtigungen.

Alle neueren Android Versionen benötigen sonst aber für Berechtigungen die als dangerous anerkannt werden eine Einwilligung vom User zur Laufzeit. Diese wird mit einem Dialog gegeben, der vom Betriebssystem angezeigt wird und vom Entwickler nicht verändert werden kann.

Welches Feature solche Berechtigungen braucht wird in den jeweiligen Feature Dokumentationen erwähnt.

Den Standort eines Users herauszufinden gilt als dangerous Permission und ist daher auf Android 5 und höher mit einem Dialog zur Laufzeit abzufragen. Im Gegensatz dazu ist die Internet-Permission nicht dangerous, sondern eher elementär für die aller meisten Apps.
Wenn ein User die Berechtigung nicht gibt, wird er in der Regel beim erneuten Versuch, die Permission abzufragen mit einem Haken für "nicht mehr fragen" (kommt vom Android System) konfrontiert. Natürlich muss der Entwickler sich überlegen, was er macht, wenn die Berechtigung nicht gegeben wird. Hier gibt es mehrere Srategien, die auf den Usecase beruhen, den sie Lösen sollen.

TODOS / Übung
// Der Manifest Eintrag
// Das Handling in der Activity: handeln wenn Permission nicht gegeben | wenn gegeben
// Ein Fallback falls Permission nie gegeben einbauen

// Die Eigentliche Abfrage: Nutzung von Google API für die Lokationsbestimmung