AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Geolocation Windows API

Ein Thema von dtpfl · begonnen am 18. Aug 2022 · letzter Beitrag vom 26. Aug 2022
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von dtpfl
dtpfl

Registriert seit: 19. Jan 2018
Ort: Bayern
20 Beiträge
 
Delphi 12 Athens
 
#1

Geolocation Windows API

  Alt 18. Aug 2022, 18:45
Hallo Leute,

ich werde verrückt, ich versuche über die Windows API den Standort zu bekommen, da TLocationSensor nicht (mehr) funktioniert. https://quality.embarcadero.com/browse/RSP-38580
Dafür will ich https://docs.microsoft.com/de-DE/uwp...ew=winrt-22621 benutzen, es gibt dies sogar schon in Delphi Winapi.Devices.Geolocation.

Ich habe ein C# Beispielprojekt kompiliert hier funktioniert es einwandfrei (https://github.com/microsoft/Windows...sition.xaml.cs)
Code:
var accessStatus = await Geolocator.RequestAccessAsync();

            switch (accessStatus)
            {
                case GeolocationAccessStatus.Allowed:

                    _geolocator = new Geolocator { ReportInterval = 2000 };
                    _geolocator.PositionChanged += OnPositionChanged;
                    _geolocator.StatusChanged += OnStatusChanged;
                    break;
Nun bekomme ich einen Fehler dass die Schnittstelle nicht unterstützt wird, jetzt bin ich komplett gebrochen...
Hier ist ein Ausschnitt meines Codes (der Rest ist im Anhang)t:
Code:
procedure statusCompletedAccess(asyncInfo: IAsyncOperation_1__GeolocationAccessStatus; asyncStatus: AsyncStatus);

TAccessStatusCompletedHandlerCompleted = procedure(asyncInfo: IAsyncOperation_1__GeolocationAccessStatus; asyncStatus: AsyncStatus) of object;

type TAccessStatusCompletedHandler = class(TInspectableObject, AsyncOperationCompletedHandler_1__GeolocationAccessStatus)
  private
    FEvent: TAccessStatusCompletedHandlerCompleted;
  public
    procedure Invoke(asyncInfo: IAsyncOperation_1__GeolocationAccessStatus; asyncStatus: AsyncStatus); safecall;
    constructor Create(AEvent: TAccessStatusCompletedHandlerCompleted);
  end;

constructor TAccessStatusCompletedHandler.Create(
  AEvent: TAccessStatusCompletedHandlerCompleted);
begin
  FEvent := AEvent;
end;

procedure TAccessStatusCompletedHandler.Invoke(
  asyncInfo: IAsyncOperation_1__GeolocationAccessStatus;
  asyncStatus: AsyncStatus);
begin
  FEvent(asyncInfo, asyncStatus);
end;

procedure TForm9.statusCompletedAccess(
  asyncInfo: IAsyncOperation_1__GeolocationAccessStatus;
  asyncStatus: AsyncStatus);
begin
  ShowMessage('JAA!!!');
end;
Gibt es hierfür eine Lösung oder eine gute alternative zu TLocationSensor um durchgehend den Standort ermitteln zu können? Dies muss unter Windows und auch Offline (GPS) funktionieren!

Falls dies aufwendiger ist und jemand das Interesse hat mir dabei zu helfen, könnte ich evtl. meinen Arbeitgeber fragen ob dieser dann auch "entschädigt" wird
Testprojekt im Anhang.
Angehängte Dateien
Dateityp: zip LocationCheck.zip (8,1 KB, 8x aufgerufen)
  Mit Zitat antworten Zitat
Mantrid

Registriert seit: 6. Jun 2022
Ort: Deutschland
22 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Geolocation Windows API

  Alt 21. Aug 2022, 04:23
Ich habe ein C# Beispielprojekt kompiliert hier funktioniert es einwandfrei (https://github.com/microsoft/Windows...sition.xaml.cs)
Kopier mal den reinen Sourcecode in ein neues Projekt mit neuem XAML und neuem Manifest.

Funktioniert dann das C# Projekt noch?

Bei Microsoft Projekten ist teilweise im Manifest ein generisches Zertifikat für höhere Benutzerrechte vorhanden.

Bei Einträgen wie
Zitat:
<Identity Name="Microsoft.SDKSamples.Geolocation.CS" Publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US" Version="1.0.0.0" />
<mp: PhoneIdentity PhoneProductId="38c64b46-d8e6-4583-8e8d-eef8feb28c08" PhonePublisherId="00000000-0000-0000-0000-000000000000" />
bin ich immer vorsichtig, ob das Beispiel nicht seitens Microsoft mit anderen Systemparamentern gestartet wird.

Zitat:
Gibt es hierfür eine Lösung oder eine gute alternative zu TLocationSensor um durchgehend den Standort ermitteln zu können? Dies muss unter Windows und auch Offline (GPS) funktionieren!
Geolokation ohne GPS? Irgendwo im Wald, am besten noch ohne Mobilfunk?
Also mit elektronischem Kompass hat man da nur eine rudimentäre Lokalisation.
Was soll damit erzielt werden? Geo Lock für Softwareverwendung? Da gibts kommerzielle Lösungen, die per DLL eingebunden werden können.

Zitat:
Falls dies aufwendiger ist und jemand das Interesse hat mir dabei zu helfen, könnte ich evtl. meinen Arbeitgeber fragen ob dieser dann auch "entschädigt" wird
Testprojekt im Anhang.
Wenn das Projekt interessant ist, frage ich meinen Arbeitgeber was er davon hält. Dann wird er es wahrscheinlich von deinem Arbeitgeber abkaufen und mir eine Provision vom Gewinn geben.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Geolocation Windows API

  Alt 21. Aug 2022, 08:34
Ich würde es per HTML5 realisieren, benötigt keine kommerzielle Dll und auch nichts von Microsoft
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.772 Beiträge
 
Delphi 12 Athens
 
#4

AW: Geolocation Windows API

  Alt 21. Aug 2022, 08:59
Geolocation ohne GPS funktioniert meist so, dass irgendwelche Anbieter W-Lan Router/AP Standorte
erfasst haben und durch die Info welche man gerade "empfängt"/"sieht" man einen ungefähren
Standort ermitteln kann, wenn man genügend von denen die in der DB sind gleichzeitig sieht und
eine Internetverbindung hat um diese DB abfragen zu können.

Vermutlich macht das Geolocation API genau sowas im Hintergrund, wenn kein GPS vorhanden ist.
Und nein, da sollte man kein HTML5 dafür brauchen. Dann wäre man ja wieder vom Browser und dessen
Umsetzung abhängig, was auch nicht besser wäre.
  Mit Zitat antworten Zitat
Benutzerbild von dtpfl
dtpfl

Registriert seit: 19. Jan 2018
Ort: Bayern
20 Beiträge
 
Delphi 12 Athens
 
#5

AW: Geolocation Windows API

  Alt 23. Aug 2022, 16:16
Danke für die umfangreichen & hilfreichen Antworten!
Da habe ich mich evtl. falsch ausgedrückt, natürlich sollte hauptsächlich der GPS-Sensor benutzt werden, wünschenswert wäre falls GPS mal nicht verfügbar ist sollte der Standort aus z.B. WLAN oder IP herkommen, wie die Windows-API es macht.

Zitat:
Wenn das Projekt interessant ist, frage ich meinen Arbeitgeber was er davon hält. Dann wird er es wahrscheinlich von deinem Arbeitgeber abkaufen und mir eine Provision vom Gewinn geben.
Ich melde mich mal die Tage.
  Mit Zitat antworten Zitat
Mantrid

Registriert seit: 6. Jun 2022
Ort: Deutschland
22 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Geolocation Windows API

  Alt 24. Aug 2022, 08:03
Ich melde mich mal die Tage.
Muss nicht sein.

Im Moment interessieren uns nur ERP Programme, die wir bei unseren Kunden verwenden könnten. Für alles andere wird derzeit kein Auftrag angenommen.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.058 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Geolocation Windows API

  Alt 24. Aug 2022, 08:54
Bitte sehr:
Delphi-Quellcode:
type
    TAccessStatusCompletedHandler = class(TInspectableObject,
        AsyncOperationCompletedHandler_1__GeolocationAccessStatus_Delegate_Base,
        AsyncOperationCompletedHandler_1__GeolocationAccessStatus)
    private
        FEvent: TAccessStatusCompletedHandlerCompleted;
    public
        procedure Invoke(asyncInfo: IAsyncOperation_1__GeolocationAccessStatus; asyncStatus: AsyncStatus); safecall;
        constructor Create(AEvent: TAccessStatusCompletedHandlerCompleted);
    end;
Beim Debuggen der Zuweisung AsyncOperation.Completed := CompletedHandler; kommt man in TInterfacedObject.QueryInterface raus:
Code:
System.TInterfacedObject.QueryInterface((4082257043, 58823, 23432, (190, 219, 211, 230, 55, 207, 242, 113)),(no value))
:76d2de72 combase.RoGetAgileReference + 0x62
:77b6272b ; C:\Windows\SysWOW64\Geolocation.dll
:77b742e1 ; C:\Windows\SysWOW64\Geolocation.dll
:77b7637d ; C:\Windows\SysWOW64\Geolocation.dll
Unit9.TForm9.Button3Click($43A6380)
Hier wird nach der IID = (4082257043, 58823, 23432, (190, 219, 211, 230, 55, 207, 242, 113)) gefragt, was als bekannte Hex(-String) Darstellung dem hier entspricht: '{F3524C93-E5C7-5B88-BEDB-D3E637CFF271}' .
Das wiederrum ist in Winapi.Devices.Geolocation das Interface AsyncOperationCompletedHandler_1__GeolocationAccessStatus_Delegate_Base .

Lessons Learned:
1. Debug-DCU einschalten.
2. Trace into (F7) Debugging nutzen.
3. Bei (COM-)Interface-Geschichten im Zweifelsfall ruhig auch das Eltern-Interface mit in die Klasse ziehen, auch wenn keine Methoden darin definiert sind.

Geändert von TiGü (24. Aug 2022 um 08:58 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von dtpfl
dtpfl

Registriert seit: 19. Jan 2018
Ort: Bayern
20 Beiträge
 
Delphi 12 Athens
 
#8

AW: Geolocation Windows API

  Alt 24. Aug 2022, 21:11
Bitte sehr:
Delphi-Quellcode:
type
    TAccessStatusCompletedHandler = class(TInspectableObject,
        AsyncOperationCompletedHandler_1__GeolocationAccessStatus_Delegate_Base,
        AsyncOperationCompletedHandler_1__GeolocationAccessStatus)
    private
        FEvent: TAccessStatusCompletedHandlerCompleted;
    public
        procedure Invoke(asyncInfo: IAsyncOperation_1__GeolocationAccessStatus; asyncStatus: AsyncStatus); safecall;
        constructor Create(AEvent: TAccessStatusCompletedHandlerCompleted);
    end;
Beim Debuggen der Zuweisung AsyncOperation.Completed := CompletedHandler; kommt man in TInterfacedObject.QueryInterface raus:
Code:
System.TInterfacedObject.QueryInterface((4082257043, 58823, 23432, (190, 219, 211, 230, 55, 207, 242, 113)),(no value))
:76d2de72 combase.RoGetAgileReference + 0x62
:77b6272b ; C:\Windows\SysWOW64\Geolocation.dll
:77b742e1 ; C:\Windows\SysWOW64\Geolocation.dll
:77b7637d ; C:\Windows\SysWOW64\Geolocation.dll
Unit9.TForm9.Button3Click($43A6380)
Hier wird nach der IID = (4082257043, 58823, 23432, (190, 219, 211, 230, 55, 207, 242, 113)) gefragt, was als bekannte Hex(-String) Darstellung dem hier entspricht: '{F3524C93-E5C7-5B88-BEDB-D3E637CFF271}' .
Das wiederrum ist in Winapi.Devices.Geolocation das Interface AsyncOperationCompletedHandler_1__GeolocationAccessStatus_Delegate_Base .

Lessons Learned:
1. Debug-DCU einschalten.
2. Trace into (F7) Debugging nutzen.
3. Bei (COM-)Interface-Geschichten im Zweifelsfall ruhig auch das Eltern-Interface mit in die Klasse ziehen, auch wenn keine Methoden darin definiert sind.
Oh wow vielen Dank! So tief war ich noch nie im Debuggen.
Ich krieg zwar keinen Dialog wo man nach der Erlaubnis gefragt wird, aber das denke ich liegt daran dass VCL keine WINUI oder UWP ist.
Ich schau mal was ich hier machen kann.

Btw. wo enable ich Debug-DCU?
Delphi-Community Discord:
https://discord.com/invite/c382VBk
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.772 Beiträge
 
Delphi 12 Athens
 
#9

AW: Geolocation Windows API

  Alt 24. Aug 2022, 21:19
Debug DCUs: Projekt/Optionen/Erzeugen/Delphi-Compiler/Compilieren/Mit Debug DCUs
  Mit Zitat antworten Zitat
Benutzerbild von dtpfl
dtpfl

Registriert seit: 19. Jan 2018
Ort: Bayern
20 Beiträge
 
Delphi 12 Athens
 
#10

AW: Geolocation Windows API

  Alt 25. Aug 2022, 16:00
Zitat:
IID = (4082257043, 58823, 23432, (190, 219, 211, 230, 55, 207, 242, 113)) gefragt, was als bekannte Hex(-String)
Wie kommst du von diesem Wert zu diesem Hex(-String)? Was wäre hier die einfachste Möglichkeit?
Delphi-Community Discord:
https://discord.com/invite/c382VBk
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz