【Android】AudioManagerで着信モード(サイレント/バイブ/通常)を検出する方法
この記事では、AndroidアプリでAudioManagerを利用して、端末の現在の着信モード(サイレント・バイブ・通常)を検出する方法を、実際のサンプルコードとともに解説します。マナーモードの状態に応じて通知やアプリの動作を切り替えたい場合に役立つ定番テクニックです。
検出の仕組み
Androidでは、システムサービスであるAudioManagerのgetRingerMode()メソッドを呼び出すことで、現在の着信モードを簡単に取得できます。戻り値は次の3種類です。
- RINGER_MODE_SILENT … サイレントモード(着信音なし)
- RINGER_MODE_VIBRATE … バイブレーションモード
- RINGER_MODE_NORMAL … 通常モード(着信音あり)
なお、この情報の取得には特別なパーミッションは一切不要なので、手軽に実装できるのが魅力です。
手順1:プロジェクトを作成する
Android Studioを起動し、メニューから「File」→「New Project」を選択します。必要な項目を入力して、新しいプロジェクトを作成しましょう。
手順2:レイアウトファイル(activity_main.xml)
res/layout/activity_main.xml に以下のコードを記述します。
<?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"
android:padding="16dp"
tools:context=".MainActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Detect Android user agent type in general"
android:textSize="24sp"
android:textStyle="bold"/>
</RelativeLayout>
手順3:MainActivity.java
src/MainActivity.java に以下のコードを追加します。
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.media.AudioManager;
import android.os.Bundle;
import android.widget.Toast;
import java.util.Objects;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
switch (Objects.requireNonNull(am).getRingerMode()) {
case AudioManager.RINGER_MODE_SILENT:
Toast.makeText(MainActivity.this, "Silent Mode", Toast.LENGTH_SHORT).show();
break;
case AudioManager.RINGER_MODE_VIBRATE:
Toast.makeText(MainActivity.this, "Vibrate Mode", Toast.LENGTH_SHORT).show();
break;
case AudioManager.RINGER_MODE_NORMAL:
Toast.makeText(MainActivity.this, "Normal Mode", Toast.LENGTH_SHORT).show();
break;
}
}
}
ポイントは、getSystemService(Context.AUDIO_SERVICE)でAudioManagerのインスタンスを取得し、getRingerMode()の戻り値をswitch文で判定している箇所です。検出したモードに応じて、Toastで現在の状態を画面に表示しています。
手順4:AndroidManifest.xml
androidManifest.xml は以下のように記述します。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="app.com.sample">
<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に接続している前提で進めます。Android Studioでプロジェクト内のアクティビティファイルを開き、ツールバーの「Run」アイコンをクリックしてください。接続したモバイルデバイスを選択すると、端末側にアプリが起動します。
端末の着信モードを切り替えながらアプリを起動すると、現在のモードがToastで表示されます。
- サイレントモード時 →「Silent Mode」と表示
- バイブモード時 →「Vibrate Mode」と表示
- 通常モード時 →「Normal Mode」と表示

まとめ
AudioManagerのgetRingerMode()を使えば、パーミッションを追加することなく、わずか数行のコードで着信モードを判別できます。「サイレント中は通知を控える」「バイブ中は画面表示のみ行う」など、ユーザー体験を向上させる処理と組み合わせて、ぜひ活用してみてください。
-
【Android】5秒間のユーザー非アクティブ(無操作)を検出する方法を解説
はじめに 本記事では、Androidアプリでユーザーが5秒間何も操作しなかったこと(非アクティブ状態)を検出する方法を、サンプルコードとともに解説します。 鍵となるのは、Activityクラスに標準で用意されているonUserInteraction()コールバックです。このメソッドはタップやスワイプなど、ユーザーが画面を操作するたびに呼び出されるため、Handlerと組み合わせることで「最後の操作からの経過時間」を簡単に計測できます。 手順1:新規プロジェクトを作成する Android Studioを起動し、メニューから「File」→「New Project」を選択します。必要事項を入力して、
-
AndroidユーザーをFaceTimeで呼び出す方法|iOS 15のリンク機能を使った招待手順
FaceTimeは登場以来、Appleデバイス専用のプラットフォームとして知られてきました。そのため、AndroidやWindows端末を使う友人とビデオ通話をするには、ZoomやSkypeなど、別のビデオ通話アプリを利用する必要がありました。 しかし、iOS 15の登場により状況が一変しました。Appleは従来の方針を見直し、AndroidユーザーやWindowsユーザーでもFaceTimeの通話に参加できる「リンク機能」を追加したのです。 この記事では、AndroidユーザーをFaceTimeに招待して通話する方法を詳しく解説します。 FaceTimeでリンクを作成する方法 iPhoneユ