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

Artificial Intelligence: Das DWX-Themenspecial
Das Themenspecial Artificial Intelligence bringt zeigt Dir detailliert, wie Künstliche Intelligenz Deinen Alltag als Entwicklerin oder Entwickler einfacher macht.
2 Minuten
20. Nov 2025
Vektor-Datenbanken: Wenn Zahlen Bedeutung bekommen - KI für KMU, Teil 3
Vektoren sind die Brücke zwischen menschlicher Sprache – oder anderen Konstrukten – und maschinellem Verstehen.
7 Minuten
20. Nov 2025
Bob lernt Fachjargon - Testdata-Builder, Teil 3
Vom Fluent-API zur Geschäftssprache – wie Domain-spezifische Sprachen Tests noch lesbarer und ausdrucksstärker machen.
6 Minuten
19. Nov 2025

Das könnte Dich auch interessieren

Einfach und schnell zur webbasierten Datenbank-App - GAPTEQ
Die Low-Code-Plattform GAPTEQ bietet bei der Entwicklung individueller Web-Anwendungen mit Zugriff auf SQL-Datenbanken eine nutzerfreundliche Alternative zu MS-Access.
2 Minuten
Datenspeicherung lokal und in der Cloud - Mobile Apps entwickeln mit Delphi, Teil 4
Mobile Apps müssen die Daten, die beispielsweise durch Sensoren ermittelt werden, zwischen den Sitzungen speichern und ebenso an einen entfernten Server übertragen.
7 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
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige