Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Lesedauer 6 Min.

Zugriff auf Hardware-Features

Moderne Mobilgeräte verfügen über zahlreiche Sensoren – von GPS und Kamera bis hin zu Beschleunigungsmesser und Mikrofon. Delphi abstrahiert deren Nutzung über FireMonkey-Komponenten und einheitliche APIs.
© EMGenie

Mobile Geräte bieten heute eine Vielzahl von Sensoren, die Apps neue Möglichkeiten eröffnen – von Standortbestimmung über Bewegungssteuerung bis hin zu Videoaufnahmen (Bild 1).

Mobile Devices enthalten heute eine Vielzahl von Sensoren (Bild 1)
Mobile Devices enthalten heute eine Vielzahl von Sensoren (Bild 1) © Autor

Delphi mit dem FireMonkey-Framework (FMX) abstrahiert den plattformabhängigen Zugriff auf diese Sensoren in Komponenten. Im Folgenden geben wir einen Überblick über die wichtigsten Sensorarten (Location, Beschleunigung, Gyroskop, Kamera, Mikrofon) und zeigen, wie man diese in plattformübergreifenden Anwendungen anspricht.

Sensoren im Überblick

Folgende Sensoren und Hardwarefunktionen kommen auf einen mobilen Device primär zum Einsatz:

  • Standort: Liefert die aktuellen Längen- und Breitengrade des Geräts. Einsatz zum Beispiel in Navigation, Geotagging oder Geo-Fencing.
  • Beschleunigungssensor (Accelerometer): Misst die lineare Beschleunigung des Geräts in drei Achsen (x/y/z). Anwendung zum Beispiel in Schrittzählern, Fitness-Apps oder zur Lagebestimmung (Neigen, Schütteln).
  • Gyroskop (Lagesensor): Erfasst Drehbewegungen und Neigungswinkel. Oft in Kombination mit dem Accelerometer zur Gestenerkennung.
  • Kamera: Eingebaute Kamera(s) für Foto- und Videoaufnahmen aller Art.
  • Mikrofon: Genutzt zum Beispiel für Spracherkennung und Diktierfunktionen.

 

FMX stellt plattformübergreifende Komponenten für diese Sensoren bereit; zum Beispiel TLocationSensor für GPS, TMotionSensor für Beschleunigungswerte, TOrientationSensor für Drehung/Lage sowie TCameraComponent und TTakePhotoFromCameraAction für den Kamerazugriff. Entwickler arbeiten so mit Delphi-Klassen, ohne plattformspezifischen Code schreiben zu müssen.

TSensorManager und FMX-Sensor-Komponenten

Delphi verwendet das System.Sensors-Framework, in dem TSensorManager das Zentrum ist. Über TSensorManager.Current erhält man den Sensor-Manager. Vor der Abfrage aktiviert man diesen mit TSensorManager.Current.Activate, damit alle Sensoren erkannt werden. Danach enthält TSensorManager.Current.Sensors eine Liste der gefundenen Sensorinstanzen. Mit GetSensorsByCategory(...) filtert man gezielt nach Kategorien (zum Beispiel Location, Motion).

FMX bietet außerdem Komponenten für gängige Sensoren; man fügt sie einem Formular hinzu (Bild 2).

Sensoren werden durch nicht visuelle Komponenten gekapselt (Bild 2)

Sensoren werden durch nicht visuelle Komponenten gekapselt (Bild 2)

© Autor

Beispiele sind TLocationSensor, TMotionSensor oder TOrientationSensor. So kümmert sich der TSensorManager um die Erkennung, während die FMX-Komponenten konkrete Daten liefern. Ein Beispiel zur Nutzung des Positions-Sensors:

 

uses
  System.Sensors, FMX.Sensors, FMX.Location;

TSensorManager.Current.Activate;
LocationSensor1.Active := True; // GPS-Standort abrufen
TSensorManager.Current.Deactivate;


Standortdaten

Die Standortdaten liefert TLocationSensor (FMX.Location). Intern nutzt er die nativen Ortungsdienste (iOS: CoreLocation, Android: Location Services). Man setzt LocationSensor1.Active := True, um die Ortung zu starten. Wichtige Einstellungen sind Accuracy (Genauigkeit) und Distance (Distanz für Updates). Ändert sich die Position um mehr als Distance, wird OnLocationChanged ausgelöst. Dann stehen die Ortungsdaten in NewLocation.Latitude und NewLocation.Longitude zur Verfügung.

Ein Beispiel ist die Anzeige der Position auf einer Karte. Dabei werden über TLocationSensor ermittelten Koordinaten an eine Karte übergeben. Die Karte zeigt einen Marker an der aktuellen Position, der bei jedem Update des Sensors per OnLocationChanged neu gesetzt wird.

Bewegungssensoren (Accelerometer und Gyroskop)

Der TMotionSensor liefert Beschleunigungswerte (AccelerationX/Y/Z) und kann auch Geschwindigkeit oder Zustand ermitteln. Damit lassen sich Schrittzähler oder Fitness-Funktionen realisieren. Der TOrientationSensor gibt die Ausrichtung an. Solche Daten eignen sich für Spiele (Steuerung durch Kippen), VR oder Gestenerkennung. Die Sensorwerte kommen ereignisgesteuert per OnSensorChanged an, sobald man MotionSensor1.Active := True beziehungsweise OrientationSensor1.Active := True setzt.

Kamera- und Audiofunktionen

Delphi erlaubt sowohl direkten Kamerazugriff als auch einfache Aktionen. Mit TTakePhotoFromCameraAction (FMX.MediaLibrary.Actions) startet man die Kamera-App. Beim Auslösen öffnet sich die Kameraoberfläche, der Nutzer macht ein Foto und erhält es im Event OnDidFinishTaking als Bitmap zurück.

Für mehr Kontrolle verwendet man TCameraComponent (FMX.Media). Diese Komponente liefert kontinuierlich Kamerabilder. Man aktiviert sie mit CameraComponent1.Active := True und kopiert Frames per CameraComponent1.SampleBufferToBitmap(Image1.Bitmap, True) in ein FMX-Bitmap. Über Kind wählt man Front- oder Rückkamera aus. So kann man Videostreams oder Fotoaufnahmen direkt in die App einbinden.

Für Audioaufnahmen stellt FMX das TAudioCaptureDevice (FMX.Media) bereit. Über TCaptureDeviceManager.Current.DefaultAudioCaptureDevice erhält man das Mikrofonobjekt. Mit Mic.StartCapture beginnt die Aufnahme, Mic.StopCapture beendet sie. Damit lassen sich zum Beispiel Sprachnotizen realisieren.

Plattformunterschiede und Best Practices

FMX abstrahiert Android und iOS, dennoch gibt es Unterschiede. So müssen iOS-Apps bestimmte Info.plist-Schlüssel setzen (zum Beispiel NSLocationWhenInUseUsageDescription, NSCameraUsageDescription, NSMicrophoneUsageDescription), damit das System um Erlaubnis fragt. Auf Android sind die entsprechenden Permissions (ACCESS_FINE_LOCATION, CAMERA, RECORD_AUDIO) zu deklarieren und bei Bedarf zur Laufzeit einzuholen. Nicht jedes Gerät hat jeden Sensor, prüfen Sie daher TSensorManager.Current.Sensors und behandeln Sie Ausnahmen, falls ein Sensor fehlt.

Ein weiterer Punkt ist die Energieeffizienz: Sensoren können den Akku beanspruchen. Aktivieren Sie daher Sensoren nur bei Bedarf und schalten Sie sie ab, wenn sie nicht mehr gebraucht werden. Nach der Nutzung sollte man TSensorManager.Current.Deactivate aufrufen. Beim Standort-Dienst helfen größere Distance-Intervalle oder geringere Accuracy, um Energie zu sparen.

Praxisbeispiel: Bild aufnehmen und Standort ermitteln

Wir greifen auf das Beispiel aus Teil 1 und 2 (Foto-App mit Standardorterfassung und Kommentarfunktion) zurück. Mit einem Klick auf den Kamera-Button (SpeedButton mit Style-Zuweisung) wird ein Bild aufgenommen, und gleichzeitig werden die aktuellen Standortdaten ermittelt. Danach kann der Nutzer optional einen Kommentar eingeben. Alle Daten (Foto, Position, Kommentar) erscheinen als neuer Eintrag in der Ergebnisliste.

Zuerst wird mit TTakePhotoFromCameraAction die Kamera geöffnet und ein Foto aufgenommen. Dazu platzieren wir ein ActionList-Steuerelement auf dem Formular und wählen die genannte Action aus der Liste der Standardaktionen (Bild 3).

Action zur Steuerung der Bildaufnahme über die Kamera hinzufügen und konfigurieren (Bild 3)

Action zur Steuerung der Bildaufnahme über die Kamera hinzufügen und konfigurieren (Bild 3)

© Autor

Zur Verarbeitung wird das Event TakePhotoFromCameraAction1DidFinishTaking genutzt. Hier wird das aufgenommene Bild gespeichert und zu einem neuen Objekt der Liste hinzugefügt. Einen Ausschnitt aus dem relevanten Quellcode finden Sie hier:

procedure TMainForm.TakePhotoFromCameraAction1DidFinishTaking(Image: TBitmap);
var
  P: TPhoto;
  TempPath: string;
begin
  // temporären Pfad für das Foto wählen
  TempPath := TPath.Combine(TPath.GetDocumentsPath,
               Format('photo_%d.png', [FPhotos.Count + 1]));
  Image.SaveToFile(TempPath);

  // neues Foto-Objekt erzeugen
  P := TPhoto.Create;
  P.Id := FPhotos.Count + 1;
  P.Path := TempPath;
  P.ThumbPath := TempPath;   // später evtl. eigene Thumbnails generieren
  P.Timestamp := Now;

  // Dummy-Daten für Standort und Note
  P.Lat := NaN;
  P.Lon := NaN;
  P.Accuracy := NaN;
  P.Note := 'Noch kein Kommentar';

  // zur Liste hinzufügen und UI aktualisieren
  FPhotos.Add(P);
  RefreshListView;
end; 
App mit aktiver Kamerafunktion auf einem iPhone (physisch, kein Simulator) (Bild 4)

App mit aktiver Kamerafunktion auf einem iPhone (physisch, kein Simulator) (Bild 4)

© Autor

Vorerst werden für die Standortdaten und den Kommentartext Platzhalter-Daten verwendet (Bild 4).

Diese Funktionen sind im nächsten Schritt zu implementieren. Dazu müssen die Berechtigungen auf den mobilen Devices gesetzt werden, um die Geo-Position zu ermitteln. Man nutzt den TLocationSensor. Anschließend öffnet ein Eingabedialog (InputQuery) ein Textfeld für einen optionalen Kommentar. Schließlich werden das Bild, die Position (Latitude/Longitude) und der Kommentar als neuer Eintrag in eine Liste (TListView) übernommen.

Den Projektfortschritt kann man auf GitHub verfolgen und dort auch den Quellcode herunterladen.

Fazit und Ausblick

Delphi erleichtert die Integration von Sensorik, da Hardware-APIs über FMX-Komponenten verfügbar sind. Mit Verständnis der Sensor-Events, Komponenten und Berechtigungen kann man leistungsfähige plattformübergreifende Apps entwickeln. Eine einfache Integration hat das Beispiel mit der Nutzung der Kamera und der Ortungsfunktion demonstriert. Im vierten Teil zeigen wir das Speichern der Daten lokal (SQLite/FireDAC) und optional in der Cloud.

Neueste Beiträge

NuGet, mach Diagramm! - Best of NuGet, Teil 2
NuGet-Pakete sind nicht nur zur Bereitstellung von Netzwerk-Kommunikationsfunktionalität geeignet. Mit geringem Aufwand lassen sich auch ansehnliche Diagramme in alle Arten von .NET-Applikationen einbinden.
5 Minuten
2. Okt 2025
DDC hakt nach: Soll die KI das Daily übernehmen?
Was funktioniert gut beim Einsatz der KI im Entwicklungsprozess, wo stößt sie an Grenzen und was bedeutet das alles für den Berufsalltag von Entwickler:innen? Miriam Hunger berichtet von echten Aha-Momenten, kleinen Katastrophen und einer radikal neuen Teamdynamik.
4 Minuten
29. Sep 2025
Vom Prototyp zum passenden User Interface - Mobile Apps entwickeln mit Delphi, Teil 2
Die visuelle Gestaltung einer App entscheidet maßgeblich über ihren Erfolg. Insbesondere bei der Cross-Plattform-Entwicklung gilt es, ansprechende User Interfaces zu entwerfen. Themen sind Layout- und Steuerelemente, responsive Designs und der Einsatz des visuellen Form-Designers.
6 Minuten

Das könnte Dich auch interessieren

Delphi als Turbo für die mobile Entwicklung - Mobile Apps entwickeln mit Delphi, Teil 1
Delphi ermöglicht es, effizient plattformübergreifende Anwendungen zu erstellen. In diesem ersten Teil der Serie beleuchten wir die Motivation ebenso wie das Setup eines ersten Beispielprojekts.
6 Minuten
iPhone: Das passende Icon für die Website - Tipp der Woche
Ein spezielles Tag sorgt für das passende Icon einer Website.
2 Minuten
16. Feb 2023
iOS-Apps ohne Mac und Xcode - Tabris.js, Innoopract
Ein Notebook mit beliebigem Betriebssystem, ein Editor zum Schreiben des Quellcodes und das auf JavaScript basierende Tabris.js genügen, um Android- und iOS-Apps zu erstellen.
3 Minuten
27. Nov 2019
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige