今回はDelphi 10 SeattleでBroadcast Receiverを実装する方法です。
思ってるより簡単に作れます。
通知を受け取るクラスを作成します。
uses
Androidapi.JNIBridge,
Androidapi.JNI.Embarcadero,
Androidapi.JNI.GraphicsContentViewText;
type
TMyReceiver = class(TJavaLocal, JFMXBroadcastReceiverListener)
public
constructor Create;
procedure onReceive(context: JContext; intent: JIntent); cdecl;
end;
uses
Androidapi.Helpers,
Androidapi.JNI.JavaTypes;
{ TMyReceiver }
constructor TMyReceiver.Create;
begin
inherited;
end;
procedure TMyReceiver.onReceive(context: JContext; intent: JIntent);
begin
Log.d('Broadcast Received = ' + JStringToString(intent.getAction));
end;
フォームのOnCreateイベントで通知を受け取るように設定し、OnDestroyイベントで解除します。
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ private 宣言 }
FMyListener: TMyReceiver;
FBroadcastReceiver: JFMXBroadcastReceiver;
public
{ public 宣言 }
end;
procedure TForm1.FormCreate(Sender: TObject);
var
Filter: JIntentFilter;
begin
FMyListener := TMyReceiver.Create;
FBroadcastReceiver := TJFMXBroadcastReceiver.JavaClass.init(FMyListener);
Filter := TJIntentFilter.JavaClass.init;
Filter.addAction(TJIntent.JavaClass.ACTION_SCREEN_OFF);
Filter.addAction(TJIntent.JavaClass.ACTION_SCREEN_ON);
TAndroidHelper.context.getApplicationContext.registerReceiver
(FBroadcastReceiver, Filter);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
TAndroidHelper.context.getApplicationContext.unregisterReceiver
(FBroadcastReceiver);
end;
以上で完成です。
アプリケーションを実行して、画面のオン/オフを切り替えると、ログに次のように出力されます。
FMX: BroadcastSample: Broadcast Received = android.intent.action.SCREEN_OFF
FMX: BroadcastSample: Broadcast Received = android.intent.action.SCREEN_ON