端末上に表示されたバーコードなどを読み取るアプリでは、画面が暗いと読み取れないことが多いです。
このような場合、アプリ側でデバイスの輝度を上げて明るくするという手法が行なわれています。
Delphi で輝度を制御するには WindowManager.Layoutparams を使用します。
サンプルコード
フォーム上にボタンを1つ置き
- ボタンを押すと輝度を最大にします。
- 再度押すと輝度を最小にします。
という処理を記述しています。(Nexus 5, Android 5.1.1で確認)
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.