AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Android permissions mit Bluetooth LE und Location werden nicht direkt freigeschaltet
Thema durchsuchen
Ansicht
Themen-Optionen

Android permissions mit Bluetooth LE und Location werden nicht direkt freigeschaltet

Ein Thema von Rollo62 · begonnen am 13. Jul 2020 · letzter Beitrag vom 30. Jul 2020
Antwort Antwort
Seite 2 von 2     12   
Rollo62

Registriert seit: 15. Mär 2007
4.240 Beiträge
 
Delphi 12 Athens
 
#1

AW: Android permissions mit Bluetooth LE und Location werden nicht direkt freigeschal

  Alt 29. Jul 2020, 20:35
Also ich habe jetzt auch mal intensiv getestet und grundsätzlich funktioniert bei mir sowohl Delphi 10.3.3 als auch 10.4 (Patch 3) mit BLE und zwar sowohl mit Android-9 als auch Android-10.
Hattest Du mal mein Demo-Projekt geladen, mit dem aktuellen Android 29 SDK ?
https://en.delphipraxis.net/applicat...nt.php?id=2542

Müsste einfach nur in Rx10.4 geladen und gestartet werden.
Beim ersten Scan wird die Permissions's Abfrage gemacht, aber BLE startet nicht.
Erst wenn die Permissions zu der App in den Settings einmal hin und hergeändert wurde.

Sollte zumindest bei Dir genauso sein, denn ich habe hier auch ein clean installiertes Rx10.4.
Und auch das Android SDK ist 1:1 frisch installiert.

Falls es doch beim ersten Mal scannt, ohne das man in den Android Settings hin- und hersetzen muss,
würde mich das sehr wundern.
Was wäre dann anders in deiner Konfiguration als hier ?
Was jetzt an API-29 hakt weiss ich immer noch nicht, das werde ich nächste Woche weiter untersuchen.
  Mit Zitat antworten Zitat
philipp.hofmann

Registriert seit: 21. Mär 2012
Ort: Hannover
942 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Android permissions mit Bluetooth LE und Location werden nicht direkt freigeschal

  Alt 30. Jul 2020, 10:23
Hi Rollo,

jetzt läuft das Demo-Projekt auch bei mir. Ich habe drei Anpassungen vorgenommen:

a) In allen Manifest-Templates die ACCESS_BACKGROUND_LOCATION aufgenommen:

Code:
    <uses-sdk android:minSdkVersion="%minSdkVersion%" android:targetSdkVersion="%targetSdkVersion%" />
    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
    <%uses-permission%>
b) ACCESS_FINE_LOCATION aufgenommen (war unter Delphi 10.3.3 noch nicht notwendig, ab Delphi 10.4 aber scheinbar schon)

Delphi-Quellcode:
procedure TForm1.Request_LC;
var
    LPermission_LC: String;
    LPermission_LF: String;
    LPermission_LB: String;

begin

    // Location Permissions
    LPermission_LC := JStringToString( TJManifest_permission.JavaClass.ACCESS_COARSE_LOCATION );
    LPermission_LF := JStringToString( TJManifest_permission.JavaClass.ACCESS_FINE_LOCATION );
    LPermission_LB := CPermission_AccessBackgroundLocation;

    if CheckBox1.IsChecked then
    begin
        Memo1.Lines.Insert( 0, 'Request LOCATION permission WITH BG ...' );

        PermissionsService.RequestPermissions(
              [ LPermission_LC
                , LPermission_LF
                , LPermission_LB ]
            , EvOnRequestPermissionsResult_LC
            , nil // DisplayRationale
            );
    end
    else
    begin
        Memo1.Lines.Insert( 0, 'Request LOCATION permission FG only ...' );

        PermissionsService.RequestPermissions(
              [ LPermission_LC, LPermission_LF ]
            , EvOnRequestPermissionsResult_LC
            , nil // DisplayRationale
            );
    end;


end;
c) Die Permission-Result-Methode dementsprechend angepasst:

Delphi-Quellcode:
procedure TForm1.EvOnRequestPermissionsResult_LC( Sender : TObject;
                                                  const APermissions : TArray<string>;
                                                  const AGrantResults: TArray<TPermissionStatus>);
var i:integer;
begin


    if CheckBox1.IsChecked then
    begin

        if Length(AGrantResults) >= 3 then
        begin
            if (AGrantResults[0] = TPermissionStatus.Granted ) and
               (AGrantResults[1] = TPermissionStatus.Granted ) and
               (AGrantResults[2] = TPermissionStatus.Granted ) then
            begin
                 Memo1.Lines.Insert( 0, 'Permission LOCATION w/ BG granted' );

                 FRequestSequence := 1;
            end
            else
            begin
                for i:=Length(AGrantResults)-1 downto 0 do
                begin
                  if (AGrantResults[i] = TPermissionStatus.Granted) then
                    Memo1.Lines.Insert( 0, IntToStr(i)+ ': Permission granted' )
                  else
                    Memo1.Lines.Insert( 0, IntToStr(i)+ ': Permission not granted' );
                end;
                Memo1.Lines.Insert( 0, 'Permission LOCATION w/ BG not fully granted' );
                FRequestSequence := 0;
            end;
        end
        else
        begin
             Memo1.Lines.Insert( 0, 'Permission LOCATION w/ BG error' );

             FRequestSequence := 0;
        end;


    end
    else
    begin

        if Length(AGrantResults) >= 2 then
        begin
            if (AGrantResults[0] = TPermissionStatus.Granted ) and
               (AGrantResults[1] = TPermissionStatus.Granted ) then
            begin
                 Memo1.Lines.Insert( 0, 'Permission LOCATION FG granted' );

                 FRequestSequence := 1;
            end
            else
            begin
                for i:=Length(AGrantResults)-1 downto 0 do
                begin
                  if (AGrantResults[i] = TPermissionStatus.Granted) then
                    Memo1.Lines.Insert( 0, IntToStr(i)+ ': Permission granted' )
                  else
                    Memo1.Lines.Insert( 0, IntToStr(i)+ ': Permission not granted' );
                end;
                Memo1.Lines.Insert( 0, 'Permission LOCATION FG not fully granted' );
                FRequestSequence := 0;
            end;
        end
        else
        begin
             Memo1.Lines.Insert( 0, 'Permission LOCATION FG error' );

             FRequestSequence := 0;
        end;


    end;

end;
Je nach Android-Version bekommt man in der Permission-Result-Methode jetzt auch ein "Not fully granted" zurück und muss dann z.B. intern wissen, dass für Android 5.x nur die erste von hier dreien Permission erlaubt sein muss.

Damit ging der Scan (reicht dir das als Result?) auf einem Android-9 und einem Android-10-Device.

Grüße, Philipp
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 09:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz