[Android]バイブをバージョン依存なしで使えるヘルパークラスを作ってみた

Androidのバイブの実装は意外と面倒ですよね。
バージョンに対応しようとするとコードが複雑になりがちです。
そこで、簡単にバイブをさせるためのヘルパークラスを作ってみました。

バージョン依存なしで使えるバイブレーションヘルパー

Oreo以降だと多少使い方が異なります。

import android.content.Context;
import android.os.VibrationEffect;
import android.os.Vibrator;

public class VibratiorHelper {

	private Vibrator mVibrator;

	public VibratiorHelper( Context context ) {
		mVibrator = (Vibrator)context.getSystemService( Context.VIBRATOR_SERVICE );
	}

	public void vibrate( long milliseconds ) {
		if ( mVibrator != null ) {
			if ( android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O ) {
				VibrationEffect ve = VibrationEffect.createOneShot( milliseconds, VibrationEffect.DEFAULT_AMPLITUDE );
				mVibrator.vibrate( ve );
			} else {
				mVibrator.vibrate( milliseconds );
			}
		}
	}


	public void vibrate( long[] timings, int[] amplitudes, int repeat ) {
		if ( mVibrator != null ) {
			if ( android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O ) {
				VibrationEffect ve = VibrationEffect.createWaveform( timings, amplitudes, repeat );
				mVibrator.vibrate( ve );
			} else {
				mVibrator.vibrate( timings, repeat );
			}
		}
	}


	public void cancel() {
		mVibrator.cancel();
	}
}

使い方

使い方は以下の通りです。


import android.os.VibrationEffect;

public class MainActivity extends AppCompatActivity {

	private VibratiorHelper mVibrator;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main_activity);

		mVibrator = new VibratiorHelper( this );

		long[] timings = { 1000, 500 };
		int[] amplitudes = { VibrationEffect.DEFAULT_AMPLITUDE, 0 };
		mVibrator.vibrate( timings, amplitudes, 0  );
	}


	@Override
	public void onPause() {
		super.onPause();

		mVibrator.cancel();
	}

簡単ですね!
汎用的な機能は、別クラスとして分けておくとアプリを公開した後の対応が楽になります。

動作保証はしておりませんので、自己責任で使ってください。

スポンサーリンク