LoginSignup
3
1

More than 5 years have passed since last update.

Delphi で Android の振動(バイブレータ)を使用する

Posted at

たとえばゲームアプリで自機にダメージを受けたときなど、振動の効果を与えたいなどありますよね。
Delphi で Android のバイブレータを使うには、Android の Vibratorクラスを使用します。

設定しておくこと

Android のバイブレータを使用する際には、権限の設定が必要です。
メニューから、プロジェクト|オプションを選択して、使用する権限のバイブレーションを true に設定する必要があります。
image.png

サンプルコード

フォーム上にボタンを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.
3
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
3
1