Android
 Computer >> コンピューター >  >> プログラミング >> Android

AndroidでNotificationCompat.Builderを使って通知を作成する方法

Androidの通知(Notification)とは?

NotificationCompat.Builderの実装方法を解説する前に、まずAndroidにおける「通知」とは何かを確認しておきましょう。通知とは、ステータスバー(アクションバー)上に表示されるシステムメッセージのようなものです。たとえば、下図のような不在着信の通知がその代表例です。

AndroidでNotificationCompat.Builderを使って通知を作成する方法

このチュートリアルでは、Androidアプリに通知機能を組み込む方法を、サンプルコードを使いながらステップごとに解説していきます。

ステップ1:新しいプロジェクトを作成する

Android Studioで新しいプロジェクトを作成します。メニューから「File」⇒「New Project」を選択し、必要な項目をすべて入力してプロジェクトを作成してください。

ステップ2:レイアウトファイル(activity_main.xml)にコードを追加する

res/layout/activity_main.xml に以下のコードを記述します。ここでは、ボタンを1つ配置したシンプルなレイアウトを定義しています。

<?xml version = "1.0" encoding = "utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android = "https://schemas.android.com/apk/res/android"
    xmlns:app = "https://schemas.android.com/apk/res-auto"
    xmlns:tools = "https://schemas.android.com/tools"
    android:layout_width = "match_parent"
    android:layout_height = "match_parent"
    tools:context = ".MainActivity">
    <Button
        android:id = "@+id/button"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:text = "Click"
        app:layout_constraintBottom_toBottomOf = "parent"
        app:layout_constraintLeft_toLeftOf = "parent"
        app:layout_constraintRight_toRightOf = "parent"
        app:layout_constraintTop_toTopOf = "parent" />
</android.support.constraint.ConstraintLayout>

ステップ3:MainActivity.javaにコードを追加する

src/MainActivity.java に以下のコードを記述します。ボタンをタップしたタイミングで通知チャンネルを作成し、NotificationCompat.Builderを使って通知を表示する仕組みです。

package com.example.andy.myapplication;
import android.annotation.SuppressLint;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.support.v4.app.NotificationCompat;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Switch;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button=findViewById(R.id.button);
        button.setOnClickListener(this);
    }
    @RequiresApi(api = Build.VERSION_CODES.O)
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.button:
            notificationDialog();
            break;
        }
    }
    @RequiresApi(api = Build.VERSION_CODES.O)
    private void notificationDialog() {
        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        String NOTIFICATION_CHANNEL_ID = "tutorialspoint_01";
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            @SuppressLint("WrongConstant") NotificationChannel notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, "My Notifications", NotificationManager.IMPORTANCE_MAX);
            // 通知チャンネルの設定を行います。
            notificationChannel.setDescription("Sample Channel description");
            notificationChannel.enableLights(true);
            notificationChannel.setLightColor(Color.RED);
            notificationChannel.setVibrationPattern(new long[]{0, 1000, 500, 1000});
            notificationChannel.enableVibration(true);
            notificationManager.createNotificationChannel(notificationChannel);
        }
        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID);
        notificationBuilder.setAutoCancel(true)
        .setDefaults(Notification.DEFAULT_ALL)
        .setWhen(System.currentTimeMillis())
        .setSmallIcon(R.mipmap.ic_launcher)
        .setTicker("Tutorialspoint")
        //.setPriority(Notification.PRIORITY_MAX)
        .setContentTitle("sample notification")
        .setContentText("This is sample notification")
        .setContentInfo("Information");
        notificationManager.notify(1, notificationBuilder.build());
    }
}

アプリを実行して動作を確認する

それでは、アプリケーションを実行してみましょう。ここでは、実際のAndroid端末がパソコンに接続されているものとして説明を進めます。

Android Studioからアプリを実行するには、プロジェクト内のいずれかのアクティビティファイルを開き、ツールバーにある「Run」アイコンをクリックします。実行対象として接続中のモバイル端末を選択すると、端末にアプリの初期画面が表示されます。

AndroidでNotificationCompat.Builderを使って通知を作成する方法

次に、画面上のボタンをタップしてみてください。以下のように通知が表示されれば成功です。

AndroidでNotificationCompat.Builderを使って通知を作成する方法

コードのポイント解説

  • 通知チャンネルの作成:Android 8.0(APIレベル26)以降では、通知を表示するために必ず通知チャンネル(NotificationChannel)を作成する必要があります。チャンネルごとにLEDライトや振動パターンなどの挙動を個別に設定できます。
  • NotificationCompat.Builder:サポートライブラリが提供するビルダークラスで、古いOSバージョンとの互換性を保ちながら通知を構築できます。タイトル、本文、アイコンなどをチェーン形式で指定できるのが特徴です。
  • setAutoCancel(true):ユーザーが通知をタップした際に、通知を自動的に消すための設定です。
  • notificationManager.notify():第1引数のIDで通知を識別します。同じIDで呼び出すと既存の通知が更新され、異なるIDを指定すれば複数の通知を同時に表示できます。

なお、Android 13(APIレベル33)以降で通知を表示するには、あらかじめ POST_NOTIFICATIONS 権限をマニフェストに宣言し、ランタイムで許可を求める必要がある点にも注意してください。

  1. 【Android開発】角丸のEditTextを作成する方法をステップごとに解説

    はじめにこの記事では、Androidアプリで角が丸い(角丸)EditTextを作成する方法を、具体的なコード例とともに解説します。drawableリソースにカスタムのshapeファイルを定義し、それをEditTextの背景に設定するだけで、簡単におしゃれな角丸デザインを実現できます。手順1:新規プロジェクトを作成するまず、Android Studioで新しいプロジェクトを作成します。メニューから「File → New Project」を選択し、必要な情報を入力してプロジェクトを作成してください。手順2:レイアウトファイル(activity_main.xml)を編集する次に、「res/layou

  2. CSSで通知バッジ付きボタンを作成する方法【コード例付き】

    CSSを使えば、通知件数を示すバッジ(数字)が付いたボタンを簡単に作成できます。ポイントは、親要素に position: relative; を指定し、バッジ側に position: absolute; を指定して右上に配置することです。以下に、実際に動作するサンプルコードを紹介します。 実装例 <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1"> <styl