Page 1 of 2 1 2 LastLast
Results 1 to 15 of 18

Thread: Helderheid wijzigen

  1. #1

    Helderheid wijzigen

    Hoe kan ik de helderheid (Screen Brightness) wijzigen van een Android App ?

    Voorheen (met XE10.1), deed ik dat met:

    uses ScreenBrightnessU;
    SetScreenBrightness( );

    Maar dat geeft nu een Permission fout: App does not have the WRITE_SETTINGS Permission

    Terwijl ik bij User Permissions, Write settings wel heb aangevinkt, en op mijn Telefoon (waarop de App draait), bij de App alle Permissions heb aanstaan.

  2. #2
    Quote Originally Posted by MMSoft View Post
    Terwijl ik bij User Permissions, Write settings wel heb aangevinkt, en op mijn Telefoon (waarop de App draait), bij de App alle Permissions heb aanstaan.
    Heb je de setting "Write" aangevinkt of heb je de setting "Write Settings" aangevinkt???
    Want volgens mij vraagt ie om de laatste.
    En "Write naar SdCard" is waarschijnlijk wat anders dan "Write naar Settings".

    Als je geen "Write Settings" hebt dan moet je misschien bij de manifest (of in de project-opties) aangeven dat je de "Write Settings" rechten wilt hebben.

    En heb je overigens al gegoogled op WRITE_SETTINGS permission Delphi?
    Want dan kom je ook wel het een en ander tegen.

  3. #3
    User permissions:
    Click image for larger version. 

Name:	User Permissins.jpg 
Views:	178 
Size:	13.8 KB 
ID:	8012

    Fout melding:
    Click image for larger version. 

Name:	Fout Melding.jpg 
Views:	232 
Size:	21.6 KB 
ID:	8013

    Als ik zoek kom ik o.a. dit tegen, maar begrijp nog niet goed hoe dit werkt:
    http://blong.com/Articles/AndroidPer...ermissions.htm

  4. #4
    Heel even een vraag, is het de bedoeling dat je de brightness van alleen je eigen app aan past of de volledige brightness van de telefoon?

    Edit:
    Je zou een TLayout kunnen gebruiken en hier alle controls in plaatsen.
    Dan vervolgens een TContrastEffect toevoegen aan de layout en hier de brightness van wijzigen.
    Zou dat het gewenste effect hebben denk je?
    Last edited by crownie; 10-Sep-19 at 13:33.

  5. #5
    Op het Form heb ik een "ScaledLayout" i.v.m. het aanpassen van de verschilllende scherm maten.
    En op "ScaledLayout" staan al 12 TLayouts (t.b.v. de cijfers van een analoge klok).

    Om nu ook nog alles op een ander TLayout te zetten gaat denk ik wel een beetje ver.

    Het mooiste was (en zo gebruik ik het al jaren) is om de helderheid aan te passen.
    Dat was in XE10.1 geen probleem, en nu wel.

    Het probleem met permissions moet ik toch zien te doorgronden, want intussen kom ik meer van dergelijke problemen tegen bij andere Apps die ik aan het omzetten ben.

  6. #6
    Je kan denk ik ook gewoon dat effect op de scaled layout zetten, zou net zo goed moeten werken.

    Ik had het even snel geprobeerd met een TLayout en op die layout stond een TRectangle, de instellingen van TContrastEffect hadden toen ook effect op de rectangle terwijl het effect zelf gekoppeld was aan de layout.
    Last edited by crownie; 10-Sep-19 at 13:59.

  7. #7
    Ik heb de oude helderheid verwijderd.

    Ik heb dus van alles op een "ScaledLayout" staan, deze "TLayout" heb ik hier ook op geplaatst, en heb het idee dat deze dan al meteen gekoppeld is.

    ContrastEffect1.Brightness geeft ik een waarde van 0 … 1, en inderdaad er wijzigt iets.
    De 12 Layout's wijzigen, maar de zwarte achtergrond en de Labels helaas niet.

    Moet ik deze "TLayout" ook nog koppelen aan de zwarte achtergrond en de Labels ?

  8. #8
    Nee, je hebt de TLayout niet echt nodig.
    Je kan het ook toevoegen op de TScaledLayout dat is geen probleem.

    Je voegt dus de TContrastEffect toe, je zorgt dat deze direct onder je ScaledLayout valt.
    En dan kan je daarin de brightness aanpassen, de brightness gaat van -1 tot +1 en kan komma's bevatten (of punten, ligt aan je settings)
    je kan dus -0,5 instellen.

    Alles boven de 0 maakt het lichter, alles onder de 0 maakt het donkerder.
    Je kan ook een beetje spelen met de contrast property.

    Ik had de volgorde zo staan. (die TLayout bevat een rectangle, zoals jij ook 12 layouts hebt voor de cijfers van de klok)
    Name:  contrastEffect.png
Views: 749
Size:  3.3 KB

  9. #9
    Scaledlayout1 staat direct op het Form, daaronder ContrastEffect1, en daaronder alles wat geregeld moet worden.
    Name:  1.jpg
Views: 742
Size:  21.3 KB


    Welke waarde ik "ContrastEffect1.Brightness" ook geef alles blijft zwart en zie niets.

    Ik werkt met een zwarte achtergrond:
    Form1.FullScreen := True; //Het complete scherm gebruiken
    Form1.Fill.Color := TAlphaColorRec.Black; //Form Kleur Zwart
    Form1.Fill.Kind:= TbrushKind.Solid; //Het Form vullen met Zwart

    En de Labels zijn Wit op Zwart:
    Label1.StyledSettings := Label1.StyledSettings - [TStyledSetting.ssFamily, TStyledSetting.ssSize, TStyledSetting.ssStyle, TStyledSetting.ssFontColor];
    Label1.TextSettings.Font.Family := 'Arial';
    Label1.TextSettings.Font.Size := 70;
    Label1.TextSettings.Font.Style := [TFontStyle.fsBold];
    Label1.TextSettings.FontColor := TAlphaColorRec.White;

    Mogelijk heeft het hier mee te maken dat het niet werkt bij mij.

  10. #10
    Zou je het project misschien kunen delen?
    Edit laat maar hoor, ik kan het al reproduceren.

    Het heeft inderdaad met je form te maken. Als ik het form zo in stel dan werkt het voor mij ook niet.
    Zal kijken of ik er wat voor kan verzinnen

  11. #11
    Ok ik heb een manier gevonden waarop het wel kan werken met een ContrastEffect maar ik weet niet of het het wenselijke effect voor jou heeft.
    Daarnaast heb ik ook geen idee of dit een rare workaround is of dat het echt op deze manier hoort te werken.

    Je kan een TRectangle op je form zetten.
    Nu zijn er 2 opties en je moet zelf maar beslissen welke van de 2 de betere is.

    1. Je zet je TRectangle direct op je form en zorgt dat je ScaledLayout hier binnen valt.
    Attachment 8016
    2. Je zet alle controls die binnen je ScaledLayout vallen op de TRectangle en de rectangle zelf binnen je layout.
    Attachment 8017

    Nu zorg je dat van je rectangle de fill color zwart is.

    Stroke.Thickness zou ik op 0 zetten.

    Verder moet je de rectangle align Client maken zodat deze over het volledige scherm gaat.

    Als je nu het ContrastEffect aan past zou het op alle controls moeten werken.

  12. #12
    Heel erg bedankt voor deze oplossing, maar helaas heeft dit niet het effect wat ik gewend was.
    Ik wijzigde de helderheid van de Telefoon/Tablet, en dat werkte perfect.

    Helaas werkt dat nu niet/lastig i.v.m. de permissions.

    Als ik dit weer voor elkaar zou kunnen krijgen dan was ik er, maar wie weet hoe dat moet ?

  13. #13
    Ik heb even wat dingen geprobeerd en bij mij werkt het.

    Na wat zoeken kwam ik op StackOverflow en zag de vraag waar jij je code (denk ik) vandaan hebt.
    Mijn vermoeden is dat de manier waarop gecontroleerd wordt op de rechten gewoon niet meer werkt en dat je onterecht die foutmelding krijgt.

    Je kan er dus voor kiezen om die controles weg te halen of zelf de procedures te maken.
    Ik gok dat je SetBrightness met een minimum van 0 en een maximum van 255 kan opgeven in de SetBrightness procedure.
    Ik heb het geprobeerd met 2 knoppen (voor omhoog en omlaag) met de stappen 0, 20, 40, 60, 80, en 100 en dan was de brightness geen 100%
    In de setBrightness wordt namelijk ook nog een deling door 255 gedaan dus mijn aanname is dat de waarde tussen 0 en 1 moet liggen.

    De code die ik heb gebruikt:
    Delphi Code:
    1. uses
    2.   {Deze 3 units heb je sowieso nodig voor de brightness}
    3.   Androidapi.Helpers,
    4.   Androidapi.JNI.Provider,
    5.   Androidapi.JNI.GraphicsContentViewText
    6.  
    7. function GetScreenBrightness: Byte;
    8. var
    9.   Resolver: JContentResolver;
    10. begin
    11.   Resolver :=  TAndroidHelper.ContentResolver;
    12.   Result := TJSettings_System.JavaClass.getInt(
    13.     Resolver,
    14.     TJSettings_System.JavaClass.SCREEN_BRIGHTNESS);
    15. end;
    16.  
    17. procedure SetBrightness(AValue: single);
    18. var
    19.   LWindow: JWindow;
    20.   LParams: JWindowManager_LayoutParams;
    21. begin
    22.   LWindow := TAndroidHelper.Activity.getWindow;
    23.   LParams := LWin.getAttributes;
    24.   LParams.screenBrightness := AValue / 255;
    25.   LWindow.setAttributes(LParams);
    26. end;

    Deze code is soort van overgenomen van https://stackoverflow.com/a/39642846/1023679 maar dan wat eenvoudiger.
    je zou ook nog kunnen kijken waarom de controle op permissions op dit moment niet werkt, dus dan zou de fout in de unit MiscU zitten.
    Als sub testje zou je in HasPermissions direct een Exit(true) kunnen doen om te kijken of het dan wel werkt.

    Ik hoop dat je nu verder kan, ik vond het zelf leuk om uit te zoeken, het is voor mij ook nieuw terrein en heb weer wat nieuwe dingen geleerd

  14. #14
    Code:
    unit Unit1;
    
    interface
    
    uses
      System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
      FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, System.Sensors,
      System.Sensors.Components, FMX.Controls.Presentation, FMX.StdCtrls;
    
    function GetScreenBrightness: Byte;
    
    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
        procedure SetBrightness(AValue: single);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.fmx}
    
    uses
      {Deze 3 units heb je sowieso nodig voor de brightness}
      Androidapi.Helpers,
      Androidapi.JNI.Provider,
      Androidapi.JNI.GraphicsContentViewText;
    
    
    function GetScreenBrightness: Byte;
    var
      Resolver: JContentResolver;
    begin
      Resolver :=  TAndroidHelper.ContentResolver;
      Result := TJSettings_System.JavaClass.getInt(
        Resolver,
        TJSettings_System.JavaClass.SCREEN_BRIGHTNESS);
    end;
    
    
    procedure SetBrightness(AValue: single);
    var
      LWindow: JWindow;
      LParams: JWindowManager_LayoutParams;
    begin
      LWindow := TAndroidHelper.Activity.getWindow;
      LParams := LWin.getAttributes;
      LParams.screenBrightness := AValue / 255;
      LWindow.setAttributes(LParams);
    end;
    
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     //
    end;
    
    end.
    Geeft deze fout melding:
    [DCC Error] Unit1.pas(54): E2003 Undeclared identifier: 'LWin'

  15. #15
    Ah ik had inderdaad in de code wat namen gewijzigd,
    in SetBrightness staat nu LParams := LWin.getAttributes
    Dat moet dan LWindow.getAttributes zijn

Page 1 of 2 1 2 LastLast

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •