Delphiでお手軽プログラミング

Delphiでお手軽プログラミングメニュー

AndroidのVibrator、VibrationEffectでバイブレーション機能を使う

~DelphiでAndroidのVibrator、VibrationEffectでバイブレーション機能を使う



Delphiを起動

Delphiを起動して新規FMXプロジェクトを作成し、ターゲットプラットフォームをAndroidに設定して、 フォームにTButtonを配置します。プロジェクトとユニットを保存します。


プロジェクト⇒オプションをクリックし、アプリケーション⇒使用する権限 から 「バイブレーション」にチェックを入れて(True)、「保存」ボタンを押します。

3.ソースコードの記述

Button1を押したらAndroidを振動させます。

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;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { private 宣言 }
  public
    { public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

uses
  Androidapi.JNI.Os,
  Androidapi.Helpers,
  Androidapi.JNIBridge,
  Androidapi.JNI.GraphicsContentViewText,
  Androidapi.JNI.App;

procedure TForm1.Button1Click(Sender: TObject);
var ve:JVibrationEffect;
    vr: JVibrator;
    timings: TJavaArray<Int64>;
    amplitudes: TJavaArray<Integer>;
    repeat_:integer;
begin
  //バイブレーターサービスを取得
  vr:=TJVibrator.Wrap(
    TAndroidHelper.Activity.getSystemService(
      TJContext.JavaClass.VIBRATOR_SERVICE
    )
  );

  //300ミリ秒 , 強さデフォルト(-1)
  ve:=TJVibrationEffect.JavaClass.createOneShot(
    300,TJVibrationEffect.JavaClass.DEFAULT_AMPLITUDE
  );
  vr.vibrate(ve);

  sleep(300);

  //300ミリ秒 , 強さ255(0~255で指定可能)
  ve:=TJVibrationEffect.JavaClass.createOneShot(
    300,255
  );
  vr.vibrate(ve);

  sleep(300);

  //300ミリ秒 , 強さ80(0~255で指定可能)
  ve:=TJVibrationEffect.JavaClass.createOneShot(
    300,80
  );
  vr.vibrate(ve);

  sleep(300);

  //振動タイミング(ミリ秒)
  timings:= TJavaArray<Int64>.Create(10);
  //振動の強さ(0[振動しない]~255[最大])
  amplitudes:= TJavaArray<Integer>.Create(10);
  //繰り返さない
  repeat_:=-1;

  //250ミリ秒毎に、振動の強さを大きくします
  timings[0]:=250;
  timings[1]:=250;
  timings[2]:=250;
  timings[3]:=250;
  timings[4]:=250;
  timings[5]:=250;
  timings[6]:=250;
  timings[7]:=250;
  timings[8]:=250;
  timings[9]:=250;
  amplitudes[0]:=25;
  amplitudes[1]:=50;
  amplitudes[2]:=75;
  amplitudes[3]:=100;
  amplitudes[4]:=125;
  amplitudes[5]:=150;
  amplitudes[6]:=175;
  amplitudes[7]:=200;
  amplitudes[8]:=225;
  amplitudes[9]:=250;

  ve:=TJVibrationEffect.JavaClass.createWaveform(
    timings,amplitudes,repeat_
  );
  vr.vibrate(ve);

end;

end.






Copyright 2019 Mam