Androidで通知に3つのアクションボタンを表示する方法【コード例付き解説】
このチュートリアルでは、Androidアプリの通知に3つのアクションボタンを追加して表示する方法を、実際のコード例とともにわかりやすく解説します。あわせて、通知から起動されたかどうかをActivity側で判定するテクニックも紹介します。
全体の流れ
本記事の手順は以下の通りです。
- Android Studioで新規プロジェクトを作成する
- レイアウトファイル(activity_main.xml)にボタンを配置する
- MainActivityに通知生成処理を実装する
- AndroidManifest.xmlを確認・編集する
- 実機またはエミュレータで動作確認する
ステップ1:新規プロジェクトを作成する
まず、Android Studioを開き、メニューから「File」→「New Project」を選択します。必要な項目(プロジェクト名、パッケージ名、保存先など)を入力して、新しいプロジェクトを作成しましょう。
ステップ2:レイアウトファイル(activity_main.xml)を編集する
次に、res/layout/activity_main.xmlに以下のコードを追加します。ここでは、画面中央に「Create Notification(通知を作成)」ボタンを1つ配置しています。
<?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">
<Button
android:id="@+id/btnCreateNotification"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentEnd="true"
android:layout_centerInParent="true"
android:text="Create Notification" />
</RelativeLayout>
ステップ3:MainActivityに通知処理を実装する
続いて、src/MainActivity.javaに以下のコードを記述します。ポイントは以下の3つです。
- PendingIntentにフラグを付与:通知タップ時に
fromNotificationというboolean値を渡し、Activity側で「通知から起動されたか」を判定できるようにしています。 - addAction()を3回呼び出す:
NotificationCompat.Action.Builderを使って、「Action1」「Action2」「Action3」という3つのアクションボタンを通知に追加しています。 - 通知チャンネルの作成:Android 8.0(API 26)以降では通知チャンネルが必須のため、バージョン判定を行ってチャンネルを作成しています。
package app.tutorialspoint.com.notifyme;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.NotificationCompat;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
public class MainActivity extends AppCompatActivity {
public static final String NOTIFICATION_CHANNEL_ID = "10001";
private final static String default_notification_channel_id = "default";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 通知から起動されたかどうかを判定
if (getIntent().getExtras() != null) {
Bundle b = getIntent().getExtras();
boolean cameFromNotification = b.getBoolean("fromNotification");
Log.i("Came from notification", String.valueOf(cameFromNotification));
}
}
public void createNotification(View view) {
Intent notificationIntent = new Intent(getApplicationContext(), MainActivity.class);
notificationIntent.putExtra("fromNotification", true);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
NotificationManager mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
NotificationCompat.Builder mBuilder = new
NotificationCompat.Builder(MainActivity.this, default_notification_channel_id);
mBuilder.setContentTitle("My Notification");
mBuilder.setContentIntent(pendingIntent);
// 3つのアクションボタンを追加
mBuilder.addAction(new NotificationCompat.Action.Builder(R.drawable.ic_action, "Action1", pendingIntent).build());
mBuilder.addAction(new NotificationCompat.Action.Builder(R.drawable.ic_action, "Action2", pendingIntent).build());
mBuilder.addAction(new NotificationCompat.Action.Builder(R.drawable.ic_action, "Action3", pendingIntent).build());
mBuilder.setContentText("Notification Listener Service Example");
mBuilder.setTicker("Notification Listener Service Example");
mBuilder.setSmallIcon(R.drawable.ic_launcher_foreground);
mBuilder.setAutoCancel(true);
// Android 8.0以降は通知チャンネルが必要
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
int importance = NotificationManager.IMPORTANCE_HIGH;
NotificationChannel notificationChannel = new
NotificationChannel(NOTIFICATION_CHANNEL_ID, "NOTIFICATION_CHANNEL_NAME", importance);
mBuilder.setChannelId(NOTIFICATION_CHANNEL_ID);
assert mNotificationManager != null;
mNotificationManager.createNotificationChannel(notificationChannel);
}
assert mNotificationManager != null;
mNotificationManager.notify((int) System.currentTimeMillis(), mBuilder.build());
}
}
補足:通知から起動されたことを判定する仕組み
通知を作成するときにnotificationIntent.putExtra("fromNotification", true)でデータを渡し、ActivityのonCreate()内でgetExtras()からその値を取得しています。これにより、通常の起動なのか、通知経由の起動なのかをログで確認できます。
ステップ4:AndroidManifest.xmlを編集する
最後に、AndroidManifest.xmlに以下のコードを記述します。バイブレーションを使用するための権限も忘れずに追加しておきましょう。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="app.tutorialspoint.com.notifyme">
<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に接続している場合は、Android Studioでプロジェクト内の任意のアクティビティファイルを開き、ツールバーの「Run(実行)」アイコンをクリックします。デバイス選択ダイアログが表示されたら、自分のモバイル端末を選択してください。
アプリが起動したら、画面中央の「Create Notification」ボタンをタップします。ステータスバーに通知が表示され、通知を展開すると「Action1」「Action2」「Action3」の3つのボタンが並んでいることが確認できます。

まとめ
本記事では、Androidの通知に3つのアクションボタンを追加する方法を解説しました。ポイントは以下の通りです。
addAction()を複数回呼び出すことで、通知に最大3つまでアクションボタンを追加できる- 各アクションには
NotificationCompat.Action.Builderでアイコン・ラベル・PendingIntentを指定する - Android 8.0以降では通知チャンネルの作成が必須
- PendingIntentにExtraデータを持たせることで、通知からの起動を判定可能
アクションボタンごとに異なる処理を実行したい場合は、それぞれ別のPendingIntentやBroadcastReceiverを割り当てるとよいでしょう。ぜひ実際のプロジェクトで試してみてください。
-
Androidで通知からサービスを開始するには?基本の手順とサンプルコードを解説
この記事では、Androidアプリで通知からサービス(Service)を開始する方法を、サンプルコードとともにわかりやすく解説します。AlarmManagerとPendingIntentを組み合わせることで、毎日決まった時刻にサービスを自動起動し、通知を表示する仕組みを実装できます。 実装の全体像 今回作成するアプリは、ボタンをタップすると翌日の午前0時にサービスが起動されるようスケジュールされ、サービス側で通知チャンネルを作成して通知を表示します。手順は以下の5ステップです。 Android Studioで新規プロジェクトを作成する activity_main.xmlにボタンを配置する M
-
Androidでアラートダイアログを表示する方法【初心者向けサンプルコード付き】
Androidでアラートダイアログ(AlertDialog)を表示する方法このチュートリアルでは、Androidアプリでアラートダイアログを表示する方法を解説します。サンプルとして、戻るボタンが押されたタイミングで「本当に終了しますか?」という確認ダイアログを表示する実装を紹介します。アプリの誤操作による終了を防ぎたい場合などに役立つ、定番のテクニックです。手順1:Android Studioで新規プロジェクトを作成するまず、Android Studioを起動し、メニューから File → New Project を選択します。必要な項目(プロジェクト名、パッケージ名、保存場所など)を入力して