Android の輝度をアプリケーション側から変更する

By: Chikako Yonezawa

Abstract: アプリ側でデバイスの輝度を変更する

端末上に表示されたバーコードなどを読み取るアプリでは、画面が暗いと読み取れないことが多いです。
このような場合、アプリ側でデバイスの輝度を上げて明るくするという手法が行なわれています。
 

Delphi で Android 端末の輝度を制御するには、Android の WindowManager.Layoutparams を使用して、現在の輝度を取得し、その情報を元に輝度の調節を行ないます。

以下、サンプルコードです。このサンプルでは、フォーム上にボタンを1つ置き

  • ボタンを押すと輝度を最大 (BRIGHTNESS_OVERRIDE_FULL) にします。
  • 再度押すと輝度を最小 (BRIGHTNESS_OVERRIDE_OFF) にします。

という処理を記述しています。

unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
  Androidapi.JNI.GraphicsContentViewText, FMX.Controls.Presentation,
  FMX.StdCtrls, Androidapi.Helpers, Androidapi.Jni, Androidapi.JNI.App
  ;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    { private 宣言 }
    jp: JWindowManager_LayoutParams;  // WindowManager.LayoutParams
    sw: Boolean;  // 単純にスイッチ
  public
    { public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

procedure TForm1.Button1Click(Sender: TObject);
begin
  if sw then begin
    //輝度を最小に
    jp.screenBrightness := TJWindowManager_LayoutParams.JavaClass.BRIGHTNESS_OVERRIDE_OFF;
    sw := False;
  end else begin
    //輝度を最大に
    jp.screenBrightness := TJWindowManager_LayoutParams.JavaClass.BRIGHTNESS_OVERRIDE_FULL;
    sw := True;
  end;
  //セットされた輝度を反映
  TAndroidHelper.Activity.getWindow.setAttributes(jp);
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  jp := TAndroidHelper.Activity.getWindow.getAttributes; // 現在の輝度の状態を取得
  sw := True;  // スイッチ初期化
end;

end.

Server Response from: ETNASC03