たとえばゲームアプリで自機にダメージを受けたときなど、振動の効果を与えたいなどありますよね。
Delphi で Android のバイブレータを使うには、Android の Vibratorクラスを使用します。
設定しておくこと
Android のバイブレータを使用する際には、権限の設定が必要です。
メニューから、プロジェクト|オプションを選択して、使用する権限のバイブレーションを true に設定する必要があります。
サンプルコード
フォーム上にボタンを2つ置き
- ボタンを押すと 500ミリ秒振動させる
- ボタンを押すと 100ミリ秒後 500ミリ秒振動 200ミリ秒後 1000ミリ秒振動
という処理を記述しています。(10.2 Tokyo, 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,
FMX.Controls.Presentation, FMX.StdCtrls,
Androidapi.JNI.Os, Androidapi.Helpers, Androidapi.JNIBridge,
Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.App;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ private 宣言 }
public
{ public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
procedure TForm1.Button1Click(Sender: TObject);
var
vr: JVibrator;
begin
// Vibratorインスタンスを取得
vr := TJVibrator.Wrap(TAndroidHelper.Activity.getSystemService(TJContext.JavaClass.VIBRATOR_SERVICE));
vr.vibrate(500); // 500ミリ秒振動させる
end;
procedure TForm1.Button2Click(Sender: TObject);
var
vr: JVibrator;
pt: TJavaArray<Int64>;
begin
// Vibratorインスタンスを取得
vr := TJVibrator.Wrap(TAndroidHelper.Activity.getSystemService(TJContext.JavaClass.VIBRATOR_SERVICE));
// 100ミリ秒off - 500ミリ秒振動させる - 200ミリ秒off - 1000ミリ秒振動させる
pt := TJavaArray<Int64>.Create(4);
pt.Items[0] := 100; // Off
pt.Items[1] := 500; // On
pt.Items[2] := 200; // Off
pt.Items[3] := 1000; // On
vr.vibrate(pt, -1); // -1は1度だけの実行 0は繰り返す 繰り返しを止めたい場合は cancelメソッドを使用する
pt.Free;
end;
end.