【Android】アクティビティでホームボタンの押下を検出する方法 ― onUserLeaveHint()の使い方
この記事では、Androidアプリのアクティビティ上で、ユーザーがホームキー(ホームボタン)を押したことを検出する方法を、サンプルコード付きでわかりやすく解説します。
検出の仕組み:onUserLeaveHint() コールバック
Androidには、ユーザーがホームボタンを押すなどしてアクティビティから離れようとしたタイミングで呼び出される onUserLeaveHint() というコールバックメソッドが用意されています。このメソッドをオーバーライドすることで、ホームキーの押下を簡単に検出できます。
なお、onUserLeaveHint() は別のアクティビティが前面に表示された場合にも呼び出されるため、「ホームボタン専用の検出」としては厳密ではない点に注意してください。
実装手順
ステップ1:Android Studioで新規プロジェクトを作成
Android Studioを起動し、「File → New Project」から新しいプロジェクトを作成します。必要な項目をすべて入力してプロジェクトをセットアップしましょう。
ステップ2:レイアウトファイル(res/layout/activity_main.xml)
以下のコードを res/layout/activity_main.xml に記述します。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android = "https://schemas.android.com/apk/res/android"
android:orientation = "vertical"
android:layout_width = "match_parent"
android:gravity = "center"
android:layout_height = "match_parent">
<TextView
android:id = "@+id/textView"
android:layout_width = "fill_parent"
android:gravity = "center"
android:textSize = "30sp"
android:layout_height = "wrap_content"
android:text = "Click here" />
</LinearLayout>ステップ3:MainActivity.java の実装
続いて、src/MainActivity.java に以下のコードを追加します。ポイントは onUserLeaveHint() をオーバーライドしている部分です。
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView)findViewById(R.id.textView);
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onUserLeaveHint();
}
});
}
@Override
protected void onUserLeaveHint(){
textView.setText("Home Button Pressed");
Toast.makeText(MainActivity.this, "Home Button pressed", Toast.LENGTH_SHORT).show();
super.onUserLeaveHint();
}
}ステップ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スマートフォンをパソコンに接続している前提で進めます。Android Studioでプロジェクト内のアクティビティファイルを開き、ツールバーのRunアイコンをクリックしてください。接続したモバイルデバイスを選択して実行すると、端末に初期画面が表示されます。

その後ホームボタンを押すと、TextViewのテキストが「Home Button Pressed」に変化し、トーストメッセージも表示されます。これで、ホームキーの押下が正しく検出できていることが確認できます。
-
【Android】AudioManagerで着信モード(サイレント/バイブ/通常)を検出する方法
この記事では、AndroidアプリでAudioManagerを利用して、端末の現在の着信モード(サイレント・バイブ・通常)を検出する方法を、実際のサンプルコードとともに解説します。マナーモードの状態に応じて通知やアプリの動作を切り替えたい場合に役立つ定番テクニックです。 検出の仕組み Androidでは、システムサービスであるAudioManagerのgetRingerMode()メソッドを呼び出すことで、現在の着信モードを簡単に取得できます。戻り値は次の3種類です。 RINGER_MODE_SILENT … サイレントモード(着信音なし) RINGER_MODE_VIBRATE … バイブ
-
【Android】5秒間のユーザー非アクティブ(無操作)を検出する方法を解説
はじめに 本記事では、Androidアプリでユーザーが5秒間何も操作しなかったこと(非アクティブ状態)を検出する方法を、サンプルコードとともに解説します。 鍵となるのは、Activityクラスに標準で用意されているonUserInteraction()コールバックです。このメソッドはタップやスワイプなど、ユーザーが画面を操作するたびに呼び出されるため、Handlerと組み合わせることで「最後の操作からの経過時間」を簡単に計測できます。 手順1:新規プロジェクトを作成する Android Studioを起動し、メニューから「File」→「New Project」を選択します。必要事項を入力して、