Androidアプリで端末を振動させる方法を解説!Vibrator APIの基本実装
Androidアプリでは、通知やユーザー操作へのフィードバックとして、端末をプログラムから振動させることができます。この記事では、Vibrator APIを使ってAndroidデバイスを振動させる基本的な実装方法を、ステップごとにわかりやすく解説します。
全体の流れ
振動機能を実装するには、主に以下の手順が必要です。
- Android Studioで新規プロジェクトを作成する
- レイアウトファイル(activity_main.xml)を用意する
- MainActivityでVibratorを取得し、振動を実行するコードを書く
- AndroidManifest.xmlに振動パーミッションを追加する
ステップ1:新規プロジェクトを作成する
Android Studioを開き、「File」→「New Project」を選択して、必要な情報を入力して新しいプロジェクトを作成します。テンプレートは「Empty Activity」で問題ありません。
ステップ2:レイアウトファイル(res/layout/activity_main.xml)を作成する
画面中央に「Vibration example」というテキストを表示するシンプルなレイアウトを定義します。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:gravity="center"
android:padding="16dp"
android:text="Vibration example"
android:textAppearance="@style/Base.TextAppearance.AppCompat.Large" />
</RelativeLayout>ステップ3:MainActivity.javaに振動処理を実装する
次に、src/MainActivity.javaに以下のコードを追加します。ポイントはOSバージョンによる分岐です。Android 8.0(API 26)以降ではVibrationEffectクラスを使用し、それ以前のバージョンでは従来のvibrate(long)メソッド(API 26で非推奨)を使います。
package app.tutorialspoint.com.sample;
import android.content.Context;
import android.os.Build;
import android.os.Bundle;
import android.os.VibrationEffect;
import android.os.Vibrator;
import android.support.v7.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// システムサービスからVibratorを取得
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
assert v != null;
// 500ミリ秒間振動させる
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
v.vibrate(VibrationEffect.createOneShot(
500,
VibrationEffect.DEFAULT_AMPLITUDE));
} else {
// API 26で非推奨となった旧メソッド
v.vibrate(500);
}
}
}コードのポイント
VibrationEffect.createOneShot(500, VibrationEffect.DEFAULT_AMPLITUDE):500ミリ秒間、デフォルトの強さで一度だけ振動させます。- 振動時間や振幅を変えれば、さまざまなフィードバック表現が可能です。
ステップ4:AndroidManifest.xmlにパーミッションを追加する
振動機能を使用するには、マニフェストファイルにVIBRATE権限の宣言が必要です。これを忘れるとアプリがクラッシュするので注意してください。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="app.tutorialspoint.com.sample">
<!-- 振動に必要なパーミッション -->
<uses-permission android:name="android.permission.VIBRATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>アプリを実行して確認する
それでは実際にアプリを動かしてみましょう。Android端末をPCにUSB接続した状態で、Android Studioのツールバーにある「Run」アイコンをクリックします。接続した実機を選択してアプリを起動すると、アプリ起動と同時に端末が約0.5秒間振動すれば成功です。
まとめ
Androidで振動を実装するには、以下の3点が重要です。
VIBRATEパーミッションをマニフェストに宣言するgetSystemService(Context.VIBRATOR_SERVICE)でVibratorインスタンスを取得する- API 26以上では
VibrationEffectを使い、それ未満では旧メソッドに分岐する
なお、より新しいプロジェクトではVibratorManager(API 31以降)の利用も推奨されています。ボタン操作時の触覚フィードバックなど、UX向上のためにもぜひ活用してみてください。
-
AndroidアプリでWi-Fiをプログラムからオン/オフする方法を解説
はじめにこの記事では、AndroidデバイスのWi-Fiをプログラムからオン/オフに切り替える方法を、実際のサンプルコードとともにわかりやすく解説します。Wi-Fiの状態を制御するには、WifiManagerクラスを使用し、AndroidManifest.xmlに必要なパーミッションを宣言する必要があります。手順1:新規プロジェクトの作成Android Studioを開き、「File」→「New Project」を選択して、必要な情報を入力し、新しいプロジェクトを作成します。手順2:レイアウトファイル(activity_main.xml)の作成res/layout/activity_main.
-
【Android】プログラムでアプリケーションを終了する方法|finish()とSystem.exit(0)の使い方
はじめにこの記事では、Androidアプリをプログラム(コード)から終了させる方法を解説します。ボタンをタップするとアプリが終了するシンプルなサンプルアプリを通じて、実装手順をステップごとに見ていきましょう。ステップ1:新規プロジェクトの作成Android Studioを起動し、「File」→「New Project」を選択します。必要な項目をすべて入力して、新しいプロジェクトを作成してください。ステップ2:レイアウトファイルの編集res/layout/activity_main.xml に以下のコードを追加します。このレイアウトには、ガイダンス用のTextViewと、アプリを終了するためのB