LoginSignup
1
1

More than 5 years have passed since last update.

Delphi で Android のスリープ制御

Posted at

以前 EDN(Embarcadero Developer Network)に投稿した記事の転記です。

動画を流すようなアプリなどの場合、画面をスリープ状態にしたくないってことありますよね。
Androidでは PowerManager を使用するとアプリ側からスリープの On/Offを行なうことができます。

注意事項

  • スリープを解除すると電池の消耗に影響するため、アプリ側では必ず解除のロジックを考慮する必要があります。
  • また、この処理を行なうのには、プロジェクトオプションで WakeLock の箇所にチェックをつけてパーミッションを設定する必要があります。 image.png

サンプルコード

フォーム上にボタンを2つおき

  • デバイスの設定で設定されているスリープを解除する処理
  • 上記を解除する処理

を記述しています。

unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
  FMX.Controls.Presentation, FMX.StdCtrls
// 以下追加
  , Androidapi.Helpers 
  , Androidapi.Jni.Os
  , Androidapi.Jni.JavaTypes
  , Androidapi.Jni.GraphicsContentViewText
//
  ;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { private 宣言 }
    PW: JPowerManager;
    WL: JPowerManager_WakeLock;
  public
    { public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

procedure TForm1.Button1Click(Sender: TObject);
begin
// wakelock でスリープの解除を行なっています
// getSystemService で powerService を取得
  PW := TJPowerManager.Wrap(TAndroidHelper.Context.getSystemService(TJContext.JavaClass.POWER_SERVICE));
  if PW <> nil then begin
    // PowerManager の wakeLock を取得
    WL := PW.newWakeLock
      (TJPowerManager.JavaClass.SCREEN_BRIGHT_WAKE_LOCK
        or TJPowerManager.JavaClass.ACQUIRE_CAUSES_WAKEUP,
      StringToJString('Power Manager Test'));
    if WL <> nil then
      WL.acquire; // acquire を実行し wakeLockを実行
  end else
    Button1.Text := 'Not use Power Manager';
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
// releaseで wakelockを解除します
  if WL <> nil then  //wakelockが設定されているか
    WL.release;        // 解除
end;

end.

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1